typescript 5.1.0-dev.20230305 → 5.1.0-dev.20230307
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/tsc.js +11 -4
- package/lib/tsserver.js +30 -5
- package/lib/tsserverlibrary.js +30 -5
- package/lib/typescript.js +30 -5
- package/lib/typingsInstaller.js +21 -3698
- package/package.json +1 -1
package/lib/typingsInstaller.js
CHANGED
|
@@ -54,7 +54,7 @@ var path = __toESM(require("path"));
|
|
|
54
54
|
|
|
55
55
|
// src/compiler/corePublic.ts
|
|
56
56
|
var versionMajorMinor = "5.1";
|
|
57
|
-
var version = `${versionMajorMinor}.0-dev.
|
|
57
|
+
var version = `${versionMajorMinor}.0-dev.20230307`;
|
|
58
58
|
|
|
59
59
|
// src/compiler/core.ts
|
|
60
60
|
var emptyArray = [];
|
|
@@ -266,21 +266,6 @@ function some(array, predicate) {
|
|
|
266
266
|
}
|
|
267
267
|
return false;
|
|
268
268
|
}
|
|
269
|
-
function getRangesWhere(arr, pred, cb) {
|
|
270
|
-
let start;
|
|
271
|
-
for (let i = 0; i < arr.length; i++) {
|
|
272
|
-
if (pred(arr[i])) {
|
|
273
|
-
start = start === void 0 ? i : start;
|
|
274
|
-
} else {
|
|
275
|
-
if (start !== void 0) {
|
|
276
|
-
cb(start, i);
|
|
277
|
-
start = void 0;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
if (start !== void 0)
|
|
282
|
-
cb(start, arr.length);
|
|
283
|
-
}
|
|
284
269
|
function concatenate(array1, array2) {
|
|
285
270
|
if (!some(array2))
|
|
286
271
|
return array1;
|
|
@@ -497,41 +482,6 @@ function multiMapRemove(key, value) {
|
|
|
497
482
|
}
|
|
498
483
|
}
|
|
499
484
|
}
|
|
500
|
-
function createQueue(items) {
|
|
501
|
-
const elements = (items == null ? void 0 : items.slice()) || [];
|
|
502
|
-
let headIndex = 0;
|
|
503
|
-
function isEmpty() {
|
|
504
|
-
return headIndex === elements.length;
|
|
505
|
-
}
|
|
506
|
-
function enqueue(...items2) {
|
|
507
|
-
elements.push(...items2);
|
|
508
|
-
}
|
|
509
|
-
function dequeue() {
|
|
510
|
-
if (isEmpty()) {
|
|
511
|
-
throw new Error("Queue is empty");
|
|
512
|
-
}
|
|
513
|
-
const result = elements[headIndex];
|
|
514
|
-
elements[headIndex] = void 0;
|
|
515
|
-
headIndex++;
|
|
516
|
-
if (headIndex > 100 && headIndex > elements.length >> 1) {
|
|
517
|
-
const newLength = elements.length - headIndex;
|
|
518
|
-
elements.copyWithin(
|
|
519
|
-
/*target*/
|
|
520
|
-
0,
|
|
521
|
-
/*start*/
|
|
522
|
-
headIndex
|
|
523
|
-
);
|
|
524
|
-
elements.length = newLength;
|
|
525
|
-
headIndex = 0;
|
|
526
|
-
}
|
|
527
|
-
return result;
|
|
528
|
-
}
|
|
529
|
-
return {
|
|
530
|
-
enqueue,
|
|
531
|
-
dequeue,
|
|
532
|
-
isEmpty
|
|
533
|
-
};
|
|
534
|
-
}
|
|
535
485
|
function isArray(value) {
|
|
536
486
|
return Array.isArray(value);
|
|
537
487
|
}
|
|
@@ -541,9 +491,6 @@ function toArray(value) {
|
|
|
541
491
|
function isString(text) {
|
|
542
492
|
return typeof text === "string";
|
|
543
493
|
}
|
|
544
|
-
function tryCast(value, test) {
|
|
545
|
-
return value !== void 0 && test(value) ? value : void 0;
|
|
546
|
-
}
|
|
547
494
|
function cast(value, test) {
|
|
548
495
|
if (value !== void 0 && test(value))
|
|
549
496
|
return value;
|
|
@@ -9307,39 +9254,6 @@ function createTextChangeRange(span, newLength) {
|
|
|
9307
9254
|
return { span, newLength };
|
|
9308
9255
|
}
|
|
9309
9256
|
var unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0);
|
|
9310
|
-
function isParameterPropertyDeclaration(node, parent) {
|
|
9311
|
-
return isParameter(node) && hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 173 /* Constructor */;
|
|
9312
|
-
}
|
|
9313
|
-
function walkUpBindingElementsAndPatterns(binding) {
|
|
9314
|
-
let node = binding.parent;
|
|
9315
|
-
while (isBindingElement(node.parent)) {
|
|
9316
|
-
node = node.parent.parent;
|
|
9317
|
-
}
|
|
9318
|
-
return node.parent;
|
|
9319
|
-
}
|
|
9320
|
-
function getCombinedFlags(node, getFlags) {
|
|
9321
|
-
if (isBindingElement(node)) {
|
|
9322
|
-
node = walkUpBindingElementsAndPatterns(node);
|
|
9323
|
-
}
|
|
9324
|
-
let flags = getFlags(node);
|
|
9325
|
-
if (node.kind === 257 /* VariableDeclaration */) {
|
|
9326
|
-
node = node.parent;
|
|
9327
|
-
}
|
|
9328
|
-
if (node && node.kind === 258 /* VariableDeclarationList */) {
|
|
9329
|
-
flags |= getFlags(node);
|
|
9330
|
-
node = node.parent;
|
|
9331
|
-
}
|
|
9332
|
-
if (node && node.kind === 240 /* VariableStatement */) {
|
|
9333
|
-
flags |= getFlags(node);
|
|
9334
|
-
}
|
|
9335
|
-
return flags;
|
|
9336
|
-
}
|
|
9337
|
-
function getCombinedModifierFlags(node) {
|
|
9338
|
-
return getCombinedFlags(node, getEffectiveModifierFlags);
|
|
9339
|
-
}
|
|
9340
|
-
function getCombinedNodeFlags(node) {
|
|
9341
|
-
return getCombinedFlags(node, (n) => n.flags);
|
|
9342
|
-
}
|
|
9343
9257
|
function findAncestor(node, callback) {
|
|
9344
9258
|
while (node) {
|
|
9345
9259
|
const result = callback(node);
|
|
@@ -9377,10 +9291,6 @@ function unescapeLeadingUnderscores(identifier) {
|
|
|
9377
9291
|
function idText(identifierOrPrivateName) {
|
|
9378
9292
|
return unescapeLeadingUnderscores(identifierOrPrivateName.escapedText);
|
|
9379
9293
|
}
|
|
9380
|
-
function identifierToKeywordKind(node) {
|
|
9381
|
-
const token = stringToToken(node.escapedText);
|
|
9382
|
-
return token ? tryCast(token, isKeyword) : void 0;
|
|
9383
|
-
}
|
|
9384
9294
|
function symbolName(symbol) {
|
|
9385
9295
|
if (symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) {
|
|
9386
9296
|
return idText(symbol.valueDeclaration.name);
|
|
@@ -9431,15 +9341,6 @@ function getDeclarationIdentifier(node) {
|
|
|
9431
9341
|
const name = getNameOfDeclaration(node);
|
|
9432
9342
|
return name && isIdentifier(name) ? name : void 0;
|
|
9433
9343
|
}
|
|
9434
|
-
function nodeHasName(statement, name) {
|
|
9435
|
-
if (isNamedDeclaration(statement) && isIdentifier(statement.name) && idText(statement.name) === idText(name)) {
|
|
9436
|
-
return true;
|
|
9437
|
-
}
|
|
9438
|
-
if (isVariableStatement(statement) && some(statement.declarationList.declarations, (d) => nodeHasName(d, name))) {
|
|
9439
|
-
return true;
|
|
9440
|
-
}
|
|
9441
|
-
return false;
|
|
9442
|
-
}
|
|
9443
9344
|
function getNameOfJSDocTypedef(declaration) {
|
|
9444
9345
|
return declaration.name || nameForNamelessJSDocTypedef(declaration);
|
|
9445
9346
|
}
|
|
@@ -9654,18 +9555,6 @@ function isOptionalChain(node) {
|
|
|
9654
9555
|
const kind = node.kind;
|
|
9655
9556
|
return !!(node.flags & 32 /* OptionalChain */) && (kind === 208 /* PropertyAccessExpression */ || kind === 209 /* ElementAccessExpression */ || kind === 210 /* CallExpression */ || kind === 232 /* NonNullExpression */);
|
|
9656
9557
|
}
|
|
9657
|
-
function isOptionalChainRoot(node) {
|
|
9658
|
-
return isOptionalChain(node) && !isNonNullExpression(node) && !!node.questionDotToken;
|
|
9659
|
-
}
|
|
9660
|
-
function isExpressionOfOptionalChainRoot(node) {
|
|
9661
|
-
return isOptionalChainRoot(node.parent) && node.parent.expression === node;
|
|
9662
|
-
}
|
|
9663
|
-
function isOutermostOptionalChain(node) {
|
|
9664
|
-
return !isOptionalChain(node.parent) || isOptionalChainRoot(node.parent) || node !== node.parent.expression;
|
|
9665
|
-
}
|
|
9666
|
-
function isNullishCoalesce(node) {
|
|
9667
|
-
return node.kind === 223 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
|
|
9668
|
-
}
|
|
9669
9558
|
function skipPartiallyEmittedExpressions(node) {
|
|
9670
9559
|
return skipOuterExpressions(node, 8 /* PartiallyEmittedExpressions */);
|
|
9671
9560
|
}
|
|
@@ -9753,12 +9642,6 @@ function isBindingName(node) {
|
|
|
9753
9642
|
function isFunctionLike(node) {
|
|
9754
9643
|
return !!node && isFunctionLikeKind(node.kind);
|
|
9755
9644
|
}
|
|
9756
|
-
function isFunctionLikeOrClassStaticBlockDeclaration(node) {
|
|
9757
|
-
return !!node && (isFunctionLikeKind(node.kind) || isClassStaticBlockDeclaration(node));
|
|
9758
|
-
}
|
|
9759
|
-
function isFunctionLikeDeclaration(node) {
|
|
9760
|
-
return node && isFunctionLikeDeclarationKind(node.kind);
|
|
9761
|
-
}
|
|
9762
9645
|
function isFunctionLikeDeclarationKind(kind) {
|
|
9763
9646
|
switch (kind) {
|
|
9764
9647
|
case 259 /* FunctionDeclaration */:
|
|
@@ -9792,15 +9675,9 @@ function isClassElement(node) {
|
|
|
9792
9675
|
const kind = node.kind;
|
|
9793
9676
|
return kind === 173 /* Constructor */ || kind === 169 /* PropertyDeclaration */ || kind === 171 /* MethodDeclaration */ || kind === 174 /* GetAccessor */ || kind === 175 /* SetAccessor */ || kind === 178 /* IndexSignature */ || kind === 172 /* ClassStaticBlockDeclaration */ || kind === 237 /* SemicolonClassElement */;
|
|
9794
9677
|
}
|
|
9795
|
-
function isClassLike(node) {
|
|
9796
|
-
return node && (node.kind === 260 /* ClassDeclaration */ || node.kind === 228 /* ClassExpression */);
|
|
9797
|
-
}
|
|
9798
9678
|
function isAccessor(node) {
|
|
9799
9679
|
return node && (node.kind === 174 /* GetAccessor */ || node.kind === 175 /* SetAccessor */);
|
|
9800
9680
|
}
|
|
9801
|
-
function isAutoAccessorPropertyDeclaration(node) {
|
|
9802
|
-
return isPropertyDeclaration(node) && hasAccessorModifier(node);
|
|
9803
|
-
}
|
|
9804
9681
|
function isMethodOrAccessor(node) {
|
|
9805
9682
|
switch (node.kind) {
|
|
9806
9683
|
case 171 /* MethodDeclaration */:
|
|
@@ -9950,9 +9827,6 @@ function isExpressionKind(kind) {
|
|
|
9950
9827
|
return isUnaryExpressionKind(kind);
|
|
9951
9828
|
}
|
|
9952
9829
|
}
|
|
9953
|
-
function isForInOrOfStatement(node) {
|
|
9954
|
-
return node.kind === 246 /* ForInStatement */ || node.kind === 247 /* ForOfStatement */;
|
|
9955
|
-
}
|
|
9956
9830
|
function isConciseBody(node) {
|
|
9957
9831
|
return isBlock(node) || isExpression(node);
|
|
9958
9832
|
}
|
|
@@ -9967,114 +9841,6 @@ function isNamedImportBindings(node) {
|
|
|
9967
9841
|
const kind = node.kind;
|
|
9968
9842
|
return kind === 272 /* NamedImports */ || kind === 271 /* NamespaceImport */;
|
|
9969
9843
|
}
|
|
9970
|
-
function canHaveSymbol(node) {
|
|
9971
|
-
switch (node.kind) {
|
|
9972
|
-
case 216 /* ArrowFunction */:
|
|
9973
|
-
case 223 /* BinaryExpression */:
|
|
9974
|
-
case 205 /* BindingElement */:
|
|
9975
|
-
case 210 /* CallExpression */:
|
|
9976
|
-
case 176 /* CallSignature */:
|
|
9977
|
-
case 260 /* ClassDeclaration */:
|
|
9978
|
-
case 228 /* ClassExpression */:
|
|
9979
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
9980
|
-
case 173 /* Constructor */:
|
|
9981
|
-
case 182 /* ConstructorType */:
|
|
9982
|
-
case 177 /* ConstructSignature */:
|
|
9983
|
-
case 209 /* ElementAccessExpression */:
|
|
9984
|
-
case 263 /* EnumDeclaration */:
|
|
9985
|
-
case 302 /* EnumMember */:
|
|
9986
|
-
case 274 /* ExportAssignment */:
|
|
9987
|
-
case 275 /* ExportDeclaration */:
|
|
9988
|
-
case 278 /* ExportSpecifier */:
|
|
9989
|
-
case 259 /* FunctionDeclaration */:
|
|
9990
|
-
case 215 /* FunctionExpression */:
|
|
9991
|
-
case 181 /* FunctionType */:
|
|
9992
|
-
case 174 /* GetAccessor */:
|
|
9993
|
-
case 79 /* Identifier */:
|
|
9994
|
-
case 270 /* ImportClause */:
|
|
9995
|
-
case 268 /* ImportEqualsDeclaration */:
|
|
9996
|
-
case 273 /* ImportSpecifier */:
|
|
9997
|
-
case 178 /* IndexSignature */:
|
|
9998
|
-
case 261 /* InterfaceDeclaration */:
|
|
9999
|
-
case 341 /* JSDocCallbackTag */:
|
|
10000
|
-
case 343 /* JSDocEnumTag */:
|
|
10001
|
-
case 320 /* JSDocFunctionType */:
|
|
10002
|
-
case 344 /* JSDocParameterTag */:
|
|
10003
|
-
case 351 /* JSDocPropertyTag */:
|
|
10004
|
-
case 326 /* JSDocSignature */:
|
|
10005
|
-
case 349 /* JSDocTypedefTag */:
|
|
10006
|
-
case 325 /* JSDocTypeLiteral */:
|
|
10007
|
-
case 288 /* JsxAttribute */:
|
|
10008
|
-
case 289 /* JsxAttributes */:
|
|
10009
|
-
case 290 /* JsxSpreadAttribute */:
|
|
10010
|
-
case 197 /* MappedType */:
|
|
10011
|
-
case 171 /* MethodDeclaration */:
|
|
10012
|
-
case 170 /* MethodSignature */:
|
|
10013
|
-
case 264 /* ModuleDeclaration */:
|
|
10014
|
-
case 199 /* NamedTupleMember */:
|
|
10015
|
-
case 277 /* NamespaceExport */:
|
|
10016
|
-
case 267 /* NamespaceExportDeclaration */:
|
|
10017
|
-
case 271 /* NamespaceImport */:
|
|
10018
|
-
case 211 /* NewExpression */:
|
|
10019
|
-
case 14 /* NoSubstitutionTemplateLiteral */:
|
|
10020
|
-
case 8 /* NumericLiteral */:
|
|
10021
|
-
case 207 /* ObjectLiteralExpression */:
|
|
10022
|
-
case 166 /* Parameter */:
|
|
10023
|
-
case 208 /* PropertyAccessExpression */:
|
|
10024
|
-
case 299 /* PropertyAssignment */:
|
|
10025
|
-
case 169 /* PropertyDeclaration */:
|
|
10026
|
-
case 168 /* PropertySignature */:
|
|
10027
|
-
case 175 /* SetAccessor */:
|
|
10028
|
-
case 300 /* ShorthandPropertyAssignment */:
|
|
10029
|
-
case 308 /* SourceFile */:
|
|
10030
|
-
case 301 /* SpreadAssignment */:
|
|
10031
|
-
case 10 /* StringLiteral */:
|
|
10032
|
-
case 262 /* TypeAliasDeclaration */:
|
|
10033
|
-
case 184 /* TypeLiteral */:
|
|
10034
|
-
case 165 /* TypeParameter */:
|
|
10035
|
-
case 257 /* VariableDeclaration */:
|
|
10036
|
-
return true;
|
|
10037
|
-
default:
|
|
10038
|
-
return false;
|
|
10039
|
-
}
|
|
10040
|
-
}
|
|
10041
|
-
function canHaveLocals(node) {
|
|
10042
|
-
switch (node.kind) {
|
|
10043
|
-
case 216 /* ArrowFunction */:
|
|
10044
|
-
case 238 /* Block */:
|
|
10045
|
-
case 176 /* CallSignature */:
|
|
10046
|
-
case 266 /* CaseBlock */:
|
|
10047
|
-
case 295 /* CatchClause */:
|
|
10048
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
10049
|
-
case 191 /* ConditionalType */:
|
|
10050
|
-
case 173 /* Constructor */:
|
|
10051
|
-
case 182 /* ConstructorType */:
|
|
10052
|
-
case 177 /* ConstructSignature */:
|
|
10053
|
-
case 245 /* ForStatement */:
|
|
10054
|
-
case 246 /* ForInStatement */:
|
|
10055
|
-
case 247 /* ForOfStatement */:
|
|
10056
|
-
case 259 /* FunctionDeclaration */:
|
|
10057
|
-
case 215 /* FunctionExpression */:
|
|
10058
|
-
case 181 /* FunctionType */:
|
|
10059
|
-
case 174 /* GetAccessor */:
|
|
10060
|
-
case 178 /* IndexSignature */:
|
|
10061
|
-
case 341 /* JSDocCallbackTag */:
|
|
10062
|
-
case 343 /* JSDocEnumTag */:
|
|
10063
|
-
case 320 /* JSDocFunctionType */:
|
|
10064
|
-
case 326 /* JSDocSignature */:
|
|
10065
|
-
case 349 /* JSDocTypedefTag */:
|
|
10066
|
-
case 197 /* MappedType */:
|
|
10067
|
-
case 171 /* MethodDeclaration */:
|
|
10068
|
-
case 170 /* MethodSignature */:
|
|
10069
|
-
case 264 /* ModuleDeclaration */:
|
|
10070
|
-
case 175 /* SetAccessor */:
|
|
10071
|
-
case 308 /* SourceFile */:
|
|
10072
|
-
case 262 /* TypeAliasDeclaration */:
|
|
10073
|
-
return true;
|
|
10074
|
-
default:
|
|
10075
|
-
return false;
|
|
10076
|
-
}
|
|
10077
|
-
}
|
|
10078
9844
|
function isDeclarationKind(kind) {
|
|
10079
9845
|
return kind === 216 /* ArrowFunction */ || kind === 205 /* BindingElement */ || kind === 260 /* ClassDeclaration */ || kind === 228 /* ClassExpression */ || kind === 172 /* ClassStaticBlockDeclaration */ || kind === 173 /* Constructor */ || kind === 263 /* EnumDeclaration */ || kind === 302 /* EnumMember */ || kind === 278 /* ExportSpecifier */ || kind === 259 /* FunctionDeclaration */ || kind === 215 /* FunctionExpression */ || kind === 174 /* GetAccessor */ || kind === 270 /* ImportClause */ || kind === 268 /* ImportEqualsDeclaration */ || kind === 273 /* ImportSpecifier */ || kind === 261 /* InterfaceDeclaration */ || kind === 288 /* JsxAttribute */ || kind === 171 /* MethodDeclaration */ || kind === 170 /* MethodSignature */ || kind === 264 /* ModuleDeclaration */ || kind === 267 /* NamespaceExportDeclaration */ || kind === 271 /* NamespaceImport */ || kind === 277 /* NamespaceExport */ || kind === 166 /* Parameter */ || kind === 299 /* PropertyAssignment */ || kind === 169 /* PropertyDeclaration */ || kind === 168 /* PropertySignature */ || kind === 175 /* SetAccessor */ || kind === 300 /* ShorthandPropertyAssignment */ || kind === 262 /* TypeAliasDeclaration */ || kind === 165 /* TypeParameter */ || kind === 257 /* VariableDeclaration */ || kind === 349 /* JSDocTypedefTag */ || kind === 341 /* JSDocCallbackTag */ || kind === 351 /* JSDocPropertyTag */;
|
|
10080
9846
|
}
|
|
@@ -10090,12 +9856,6 @@ function isDeclaration(node) {
|
|
|
10090
9856
|
}
|
|
10091
9857
|
return isDeclarationKind(node.kind);
|
|
10092
9858
|
}
|
|
10093
|
-
function isDeclarationStatement(node) {
|
|
10094
|
-
return isDeclarationStatementKind(node.kind);
|
|
10095
|
-
}
|
|
10096
|
-
function isStatementButNotDeclaration(node) {
|
|
10097
|
-
return isStatementKindButNotDeclarationKind(node.kind);
|
|
10098
|
-
}
|
|
10099
9859
|
function isStatement(node) {
|
|
10100
9860
|
const kind = node.kind;
|
|
10101
9861
|
return isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind) || isBlockStatement(node);
|
|
@@ -10155,15 +9915,6 @@ function isStringLiteralLike(node) {
|
|
|
10155
9915
|
}
|
|
10156
9916
|
|
|
10157
9917
|
// src/compiler/utilities.ts
|
|
10158
|
-
function createSymbolTable(symbols) {
|
|
10159
|
-
const result = /* @__PURE__ */ new Map();
|
|
10160
|
-
if (symbols) {
|
|
10161
|
-
for (const symbol of symbols) {
|
|
10162
|
-
result.set(symbol.escapedName, symbol);
|
|
10163
|
-
}
|
|
10164
|
-
}
|
|
10165
|
-
return result;
|
|
10166
|
-
}
|
|
10167
9918
|
var stringWriter = createSingleLineStringWriter();
|
|
10168
9919
|
function createSingleLineStringWriter() {
|
|
10169
9920
|
var str = "";
|
|
@@ -10257,36 +10008,6 @@ function nodeIsMissing(node) {
|
|
|
10257
10008
|
function nodeIsPresent(node) {
|
|
10258
10009
|
return !nodeIsMissing(node);
|
|
10259
10010
|
}
|
|
10260
|
-
function getTokenPosOfNode(node, sourceFile, includeJsDoc) {
|
|
10261
|
-
if (nodeIsMissing(node)) {
|
|
10262
|
-
return node.pos;
|
|
10263
|
-
}
|
|
10264
|
-
if (isJSDocNode(node) || node.kind === 11 /* JsxText */) {
|
|
10265
|
-
return skipTrivia(
|
|
10266
|
-
(sourceFile || getSourceFileOfNode(node)).text,
|
|
10267
|
-
node.pos,
|
|
10268
|
-
/*stopAfterLineBreak*/
|
|
10269
|
-
false,
|
|
10270
|
-
/*stopAtComments*/
|
|
10271
|
-
true
|
|
10272
|
-
);
|
|
10273
|
-
}
|
|
10274
|
-
if (includeJsDoc && hasJSDocNodes(node)) {
|
|
10275
|
-
return getTokenPosOfNode(node.jsDoc[0], sourceFile);
|
|
10276
|
-
}
|
|
10277
|
-
if (node.kind === 354 /* SyntaxList */ && node._children.length > 0) {
|
|
10278
|
-
return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
|
|
10279
|
-
}
|
|
10280
|
-
return skipTrivia(
|
|
10281
|
-
(sourceFile || getSourceFileOfNode(node)).text,
|
|
10282
|
-
node.pos,
|
|
10283
|
-
/*stopAfterLineBreak*/
|
|
10284
|
-
false,
|
|
10285
|
-
/*stopAtComments*/
|
|
10286
|
-
false,
|
|
10287
|
-
isInJSDoc(node)
|
|
10288
|
-
);
|
|
10289
|
-
}
|
|
10290
10011
|
function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) {
|
|
10291
10012
|
return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia);
|
|
10292
10013
|
}
|
|
@@ -10303,71 +10024,16 @@ function getTextOfNodeFromSourceText(sourceText, node, includeTrivia = false) {
|
|
|
10303
10024
|
}
|
|
10304
10025
|
return text;
|
|
10305
10026
|
}
|
|
10306
|
-
function getTextOfNode(node, includeTrivia = false) {
|
|
10307
|
-
return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia);
|
|
10308
|
-
}
|
|
10309
10027
|
function getEmitFlags(node) {
|
|
10310
10028
|
const emitNode = node.emitNode;
|
|
10311
10029
|
return emitNode && emitNode.flags || 0;
|
|
10312
10030
|
}
|
|
10313
|
-
function isBlockOrCatchScoped(declaration) {
|
|
10314
|
-
return (getCombinedNodeFlags(declaration) & 3 /* BlockScoped */) !== 0 || isCatchClauseVariableDeclarationOrBindingElement(declaration);
|
|
10315
|
-
}
|
|
10316
|
-
function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
|
|
10317
|
-
const node = getRootDeclaration(declaration);
|
|
10318
|
-
return node.kind === 257 /* VariableDeclaration */ && node.parent.kind === 295 /* CatchClause */;
|
|
10319
|
-
}
|
|
10320
|
-
function isAmbientModule(node) {
|
|
10321
|
-
return isModuleDeclaration(node) && (node.name.kind === 10 /* StringLiteral */ || isGlobalScopeAugmentation(node));
|
|
10322
|
-
}
|
|
10323
10031
|
function isModuleWithStringLiteralName(node) {
|
|
10324
10032
|
return isModuleDeclaration(node) && node.name.kind === 10 /* StringLiteral */;
|
|
10325
10033
|
}
|
|
10326
|
-
function isEffectiveModuleDeclaration(node) {
|
|
10327
|
-
return isModuleDeclaration(node) || isIdentifier(node);
|
|
10328
|
-
}
|
|
10329
10034
|
function isGlobalScopeAugmentation(module2) {
|
|
10330
10035
|
return !!(module2.flags & 1024 /* GlobalAugmentation */);
|
|
10331
10036
|
}
|
|
10332
|
-
function isModuleAugmentationExternal(node) {
|
|
10333
|
-
switch (node.parent.kind) {
|
|
10334
|
-
case 308 /* SourceFile */:
|
|
10335
|
-
return isExternalModule(node.parent);
|
|
10336
|
-
case 265 /* ModuleBlock */:
|
|
10337
|
-
return isAmbientModule(node.parent.parent) && isSourceFile(node.parent.parent.parent) && !isExternalModule(node.parent.parent.parent);
|
|
10338
|
-
}
|
|
10339
|
-
return false;
|
|
10340
|
-
}
|
|
10341
|
-
function isBlockScope(node, parentNode) {
|
|
10342
|
-
switch (node.kind) {
|
|
10343
|
-
case 308 /* SourceFile */:
|
|
10344
|
-
case 266 /* CaseBlock */:
|
|
10345
|
-
case 295 /* CatchClause */:
|
|
10346
|
-
case 264 /* ModuleDeclaration */:
|
|
10347
|
-
case 245 /* ForStatement */:
|
|
10348
|
-
case 246 /* ForInStatement */:
|
|
10349
|
-
case 247 /* ForOfStatement */:
|
|
10350
|
-
case 173 /* Constructor */:
|
|
10351
|
-
case 171 /* MethodDeclaration */:
|
|
10352
|
-
case 174 /* GetAccessor */:
|
|
10353
|
-
case 175 /* SetAccessor */:
|
|
10354
|
-
case 259 /* FunctionDeclaration */:
|
|
10355
|
-
case 215 /* FunctionExpression */:
|
|
10356
|
-
case 216 /* ArrowFunction */:
|
|
10357
|
-
case 169 /* PropertyDeclaration */:
|
|
10358
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
10359
|
-
return true;
|
|
10360
|
-
case 238 /* Block */:
|
|
10361
|
-
return !isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
|
|
10362
|
-
}
|
|
10363
|
-
return false;
|
|
10364
|
-
}
|
|
10365
|
-
function getEnclosingBlockScopeContainer(node) {
|
|
10366
|
-
return findAncestor(node.parent, (current) => isBlockScope(current, current.parent));
|
|
10367
|
-
}
|
|
10368
|
-
function declarationNameToString(name) {
|
|
10369
|
-
return !name || getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
|
|
10370
|
-
}
|
|
10371
10037
|
function isComputedNonLiteralName(name) {
|
|
10372
10038
|
return name.kind === 164 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
|
|
10373
10039
|
}
|
|
@@ -10433,7 +10099,7 @@ function getErrorSpanForArrowFunction(sourceFile, node) {
|
|
|
10433
10099
|
function getErrorSpanForNode(sourceFile, node) {
|
|
10434
10100
|
let errorNode = node;
|
|
10435
10101
|
switch (node.kind) {
|
|
10436
|
-
case 308 /* SourceFile */:
|
|
10102
|
+
case 308 /* SourceFile */: {
|
|
10437
10103
|
const pos2 = skipTrivia(
|
|
10438
10104
|
sourceFile.text,
|
|
10439
10105
|
0,
|
|
@@ -10444,6 +10110,7 @@ function getErrorSpanForNode(sourceFile, node) {
|
|
|
10444
10110
|
return createTextSpan(0, 0);
|
|
10445
10111
|
}
|
|
10446
10112
|
return getSpanOfTokenAtPosition(sourceFile, pos2);
|
|
10113
|
+
}
|
|
10447
10114
|
case 257 /* VariableDeclaration */:
|
|
10448
10115
|
case 205 /* BindingElement */:
|
|
10449
10116
|
case 260 /* ClassDeclaration */:
|
|
@@ -10466,10 +10133,16 @@ function getErrorSpanForNode(sourceFile, node) {
|
|
|
10466
10133
|
case 216 /* ArrowFunction */:
|
|
10467
10134
|
return getErrorSpanForArrowFunction(sourceFile, node);
|
|
10468
10135
|
case 292 /* CaseClause */:
|
|
10469
|
-
case 293 /* DefaultClause */:
|
|
10136
|
+
case 293 /* DefaultClause */: {
|
|
10470
10137
|
const start = skipTrivia(sourceFile.text, node.pos);
|
|
10471
10138
|
const end = node.statements.length > 0 ? node.statements[0].pos : node.end;
|
|
10472
10139
|
return createTextSpanFromBounds(start, end);
|
|
10140
|
+
}
|
|
10141
|
+
case 250 /* ReturnStatement */:
|
|
10142
|
+
case 226 /* YieldExpression */: {
|
|
10143
|
+
const pos2 = skipTrivia(sourceFile.text, node.pos);
|
|
10144
|
+
return getSpanOfTokenAtPosition(sourceFile, pos2);
|
|
10145
|
+
}
|
|
10473
10146
|
}
|
|
10474
10147
|
if (errorNode === void 0) {
|
|
10475
10148
|
return getSpanOfTokenAtPosition(sourceFile, node.pos);
|
|
@@ -10492,9 +10165,6 @@ function isExternalOrCommonJsModule(file) {
|
|
|
10492
10165
|
function isJsonSourceFile(file) {
|
|
10493
10166
|
return file.scriptKind === 6 /* JSON */;
|
|
10494
10167
|
}
|
|
10495
|
-
function isEnumConst(node) {
|
|
10496
|
-
return !!(getCombinedModifierFlags(node) & 2048 /* Const */);
|
|
10497
|
-
}
|
|
10498
10168
|
function isPrologueDirective(node) {
|
|
10499
10169
|
return node.kind === 241 /* ExpressionStatement */ && node.expression.kind === 10 /* StringLiteral */;
|
|
10500
10170
|
}
|
|
@@ -10533,197 +10203,28 @@ function isVariableLike(node) {
|
|
|
10533
10203
|
function isFunctionBlock(node) {
|
|
10534
10204
|
return node && node.kind === 238 /* Block */ && isFunctionLike(node.parent);
|
|
10535
10205
|
}
|
|
10536
|
-
function isObjectLiteralMethod(node) {
|
|
10537
|
-
return node && node.kind === 171 /* MethodDeclaration */ && node.parent.kind === 207 /* ObjectLiteralExpression */;
|
|
10538
|
-
}
|
|
10539
|
-
function isObjectLiteralOrClassExpressionMethodOrAccessor(node) {
|
|
10540
|
-
return (node.kind === 171 /* MethodDeclaration */ || node.kind === 174 /* GetAccessor */ || node.kind === 175 /* SetAccessor */) && (node.parent.kind === 207 /* ObjectLiteralExpression */ || node.parent.kind === 228 /* ClassExpression */);
|
|
10541
|
-
}
|
|
10542
|
-
function getContainingClass(node) {
|
|
10543
|
-
return findAncestor(node.parent, isClassLike);
|
|
10544
|
-
}
|
|
10545
|
-
function getThisContainer(node, includeArrowFunctions, includeClassComputedPropertyName) {
|
|
10546
|
-
Debug.assert(node.kind !== 308 /* SourceFile */);
|
|
10547
|
-
while (true) {
|
|
10548
|
-
node = node.parent;
|
|
10549
|
-
if (!node) {
|
|
10550
|
-
return Debug.fail();
|
|
10551
|
-
}
|
|
10552
|
-
switch (node.kind) {
|
|
10553
|
-
case 164 /* ComputedPropertyName */:
|
|
10554
|
-
if (includeClassComputedPropertyName && isClassLike(node.parent.parent)) {
|
|
10555
|
-
return node;
|
|
10556
|
-
}
|
|
10557
|
-
node = node.parent.parent;
|
|
10558
|
-
break;
|
|
10559
|
-
case 167 /* Decorator */:
|
|
10560
|
-
if (node.parent.kind === 166 /* Parameter */ && isClassElement(node.parent.parent)) {
|
|
10561
|
-
node = node.parent.parent;
|
|
10562
|
-
} else if (isClassElement(node.parent)) {
|
|
10563
|
-
node = node.parent;
|
|
10564
|
-
}
|
|
10565
|
-
break;
|
|
10566
|
-
case 216 /* ArrowFunction */:
|
|
10567
|
-
if (!includeArrowFunctions) {
|
|
10568
|
-
continue;
|
|
10569
|
-
}
|
|
10570
|
-
case 259 /* FunctionDeclaration */:
|
|
10571
|
-
case 215 /* FunctionExpression */:
|
|
10572
|
-
case 264 /* ModuleDeclaration */:
|
|
10573
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
10574
|
-
case 169 /* PropertyDeclaration */:
|
|
10575
|
-
case 168 /* PropertySignature */:
|
|
10576
|
-
case 171 /* MethodDeclaration */:
|
|
10577
|
-
case 170 /* MethodSignature */:
|
|
10578
|
-
case 173 /* Constructor */:
|
|
10579
|
-
case 174 /* GetAccessor */:
|
|
10580
|
-
case 175 /* SetAccessor */:
|
|
10581
|
-
case 176 /* CallSignature */:
|
|
10582
|
-
case 177 /* ConstructSignature */:
|
|
10583
|
-
case 178 /* IndexSignature */:
|
|
10584
|
-
case 263 /* EnumDeclaration */:
|
|
10585
|
-
case 308 /* SourceFile */:
|
|
10586
|
-
return node;
|
|
10587
|
-
}
|
|
10588
|
-
}
|
|
10589
|
-
}
|
|
10590
|
-
function isInTopLevelContext(node) {
|
|
10591
|
-
if (isIdentifier(node) && (isClassDeclaration(node.parent) || isFunctionDeclaration(node.parent)) && node.parent.name === node) {
|
|
10592
|
-
node = node.parent;
|
|
10593
|
-
}
|
|
10594
|
-
const container = getThisContainer(
|
|
10595
|
-
node,
|
|
10596
|
-
/*includeArrowFunctions*/
|
|
10597
|
-
true,
|
|
10598
|
-
/*includeClassComputedPropertyName*/
|
|
10599
|
-
false
|
|
10600
|
-
);
|
|
10601
|
-
return isSourceFile(container);
|
|
10602
|
-
}
|
|
10603
|
-
function getImmediatelyInvokedFunctionExpression(func) {
|
|
10604
|
-
if (func.kind === 215 /* FunctionExpression */ || func.kind === 216 /* ArrowFunction */) {
|
|
10605
|
-
let prev = func;
|
|
10606
|
-
let parent = func.parent;
|
|
10607
|
-
while (parent.kind === 214 /* ParenthesizedExpression */) {
|
|
10608
|
-
prev = parent;
|
|
10609
|
-
parent = parent.parent;
|
|
10610
|
-
}
|
|
10611
|
-
if (parent.kind === 210 /* CallExpression */ && parent.expression === prev) {
|
|
10612
|
-
return parent;
|
|
10613
|
-
}
|
|
10614
|
-
}
|
|
10615
|
-
}
|
|
10616
10206
|
function isSuperProperty(node) {
|
|
10617
10207
|
const kind = node.kind;
|
|
10618
10208
|
return (kind === 208 /* PropertyAccessExpression */ || kind === 209 /* ElementAccessExpression */) && node.expression.kind === 106 /* SuperKeyword */;
|
|
10619
10209
|
}
|
|
10620
|
-
function isThisInitializedDeclaration(node) {
|
|
10621
|
-
var _a2;
|
|
10622
|
-
return !!node && isVariableDeclaration(node) && ((_a2 = node.initializer) == null ? void 0 : _a2.kind) === 108 /* ThisKeyword */;
|
|
10623
|
-
}
|
|
10624
|
-
function isPartOfTypeQuery(node) {
|
|
10625
|
-
while (node.kind === 163 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
|
|
10626
|
-
node = node.parent;
|
|
10627
|
-
}
|
|
10628
|
-
return node.kind === 183 /* TypeQuery */;
|
|
10629
|
-
}
|
|
10630
10210
|
function isInJSFile(node) {
|
|
10631
10211
|
return !!node && !!(node.flags & 262144 /* JavaScriptFile */);
|
|
10632
10212
|
}
|
|
10633
|
-
function
|
|
10634
|
-
return
|
|
10635
|
-
}
|
|
10636
|
-
function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
|
|
10637
|
-
if (callExpression.kind !== 210 /* CallExpression */) {
|
|
10638
|
-
return false;
|
|
10639
|
-
}
|
|
10640
|
-
const { expression, arguments: args } = callExpression;
|
|
10641
|
-
if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
|
|
10642
|
-
return false;
|
|
10643
|
-
}
|
|
10644
|
-
if (args.length !== 1) {
|
|
10645
|
-
return false;
|
|
10646
|
-
}
|
|
10647
|
-
const arg = args[0];
|
|
10648
|
-
return !requireStringLiteralLikeArgument || isStringLiteralLike(arg);
|
|
10213
|
+
function isStringDoubleQuoted(str, sourceFile) {
|
|
10214
|
+
return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34 /* doubleQuote */;
|
|
10649
10215
|
}
|
|
10650
|
-
function
|
|
10651
|
-
|
|
10216
|
+
function getRightMostAssignedExpression(node) {
|
|
10217
|
+
while (isAssignmentExpression(
|
|
10652
10218
|
node,
|
|
10653
|
-
/*
|
|
10654
|
-
true
|
|
10655
|
-
);
|
|
10656
|
-
}
|
|
10657
|
-
function isVariableDeclarationInitializedWithRequireHelper(node, allowAccessedRequire) {
|
|
10658
|
-
return isVariableDeclaration(node) && !!node.initializer && isRequireCall(
|
|
10659
|
-
allowAccessedRequire ? getLeftmostAccessExpression(node.initializer) : node.initializer,
|
|
10660
|
-
/*requireStringLiteralLikeArgument*/
|
|
10219
|
+
/*excludeCompoundAssignments*/
|
|
10661
10220
|
true
|
|
10662
|
-
)
|
|
10221
|
+
)) {
|
|
10222
|
+
node = node.right;
|
|
10223
|
+
}
|
|
10224
|
+
return node;
|
|
10663
10225
|
}
|
|
10664
|
-
function
|
|
10665
|
-
return
|
|
10666
|
-
}
|
|
10667
|
-
function isAssignmentDeclaration(decl) {
|
|
10668
|
-
return isBinaryExpression(decl) || isAccessExpression(decl) || isIdentifier(decl) || isCallExpression(decl);
|
|
10669
|
-
}
|
|
10670
|
-
function hasExpandoValueProperty(node, isPrototypeAssignment) {
|
|
10671
|
-
return forEach(node.properties, (p) => isPropertyAssignment(p) && isIdentifier(p.name) && p.name.escapedText === "value" && p.initializer && getExpandoInitializer(p.initializer, isPrototypeAssignment));
|
|
10672
|
-
}
|
|
10673
|
-
function getAssignedExpandoInitializer(node) {
|
|
10674
|
-
if (node && node.parent && isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
|
|
10675
|
-
const isPrototypeAssignment = isPrototypeAccess(node.parent.left);
|
|
10676
|
-
return getExpandoInitializer(node.parent.right, isPrototypeAssignment) || getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
|
|
10677
|
-
}
|
|
10678
|
-
if (node && isCallExpression(node) && isBindableObjectDefinePropertyCall(node)) {
|
|
10679
|
-
const result = hasExpandoValueProperty(node.arguments[2], node.arguments[1].text === "prototype");
|
|
10680
|
-
if (result) {
|
|
10681
|
-
return result;
|
|
10682
|
-
}
|
|
10683
|
-
}
|
|
10684
|
-
}
|
|
10685
|
-
function getExpandoInitializer(initializer, isPrototypeAssignment) {
|
|
10686
|
-
if (isCallExpression(initializer)) {
|
|
10687
|
-
const e = skipParentheses(initializer.expression);
|
|
10688
|
-
return e.kind === 215 /* FunctionExpression */ || e.kind === 216 /* ArrowFunction */ ? initializer : void 0;
|
|
10689
|
-
}
|
|
10690
|
-
if (initializer.kind === 215 /* FunctionExpression */ || initializer.kind === 228 /* ClassExpression */ || initializer.kind === 216 /* ArrowFunction */) {
|
|
10691
|
-
return initializer;
|
|
10692
|
-
}
|
|
10693
|
-
if (isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
|
|
10694
|
-
return initializer;
|
|
10695
|
-
}
|
|
10696
|
-
}
|
|
10697
|
-
function getDefaultedExpandoInitializer(name, initializer, isPrototypeAssignment) {
|
|
10698
|
-
const e = isBinaryExpression(initializer) && (initializer.operatorToken.kind === 56 /* BarBarToken */ || initializer.operatorToken.kind === 60 /* QuestionQuestionToken */) && getExpandoInitializer(initializer.right, isPrototypeAssignment);
|
|
10699
|
-
if (e && isSameEntityName(name, initializer.left)) {
|
|
10700
|
-
return e;
|
|
10701
|
-
}
|
|
10702
|
-
}
|
|
10703
|
-
function isSameEntityName(name, initializer) {
|
|
10704
|
-
if (isPropertyNameLiteral(name) && isPropertyNameLiteral(initializer)) {
|
|
10705
|
-
return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
|
|
10706
|
-
}
|
|
10707
|
-
if (isMemberName(name) && isLiteralLikeAccess(initializer) && (initializer.expression.kind === 108 /* ThisKeyword */ || isIdentifier(initializer.expression) && (initializer.expression.escapedText === "window" || initializer.expression.escapedText === "self" || initializer.expression.escapedText === "global"))) {
|
|
10708
|
-
return isSameEntityName(name, getNameOrArgument(initializer));
|
|
10709
|
-
}
|
|
10710
|
-
if (isLiteralLikeAccess(name) && isLiteralLikeAccess(initializer)) {
|
|
10711
|
-
return getElementOrPropertyAccessName(name) === getElementOrPropertyAccessName(initializer) && isSameEntityName(name.expression, initializer.expression);
|
|
10712
|
-
}
|
|
10713
|
-
return false;
|
|
10714
|
-
}
|
|
10715
|
-
function getRightMostAssignedExpression(node) {
|
|
10716
|
-
while (isAssignmentExpression(
|
|
10717
|
-
node,
|
|
10718
|
-
/*excludeCompoundAssignments*/
|
|
10719
|
-
true
|
|
10720
|
-
)) {
|
|
10721
|
-
node = node.right;
|
|
10722
|
-
}
|
|
10723
|
-
return node;
|
|
10724
|
-
}
|
|
10725
|
-
function isExportsIdentifier(node) {
|
|
10726
|
-
return isIdentifier(node) && node.escapedText === "exports";
|
|
10226
|
+
function isExportsIdentifier(node) {
|
|
10227
|
+
return isIdentifier(node) && node.escapedText === "exports";
|
|
10727
10228
|
}
|
|
10728
10229
|
function isModuleIdentifier(node) {
|
|
10729
10230
|
return isIdentifier(node) && node.escapedText === "module";
|
|
@@ -10742,9 +10243,6 @@ function isBindableObjectDefinePropertyCall(expr) {
|
|
|
10742
10243
|
true
|
|
10743
10244
|
);
|
|
10744
10245
|
}
|
|
10745
|
-
function isLiteralLikeAccess(node) {
|
|
10746
|
-
return isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node);
|
|
10747
|
-
}
|
|
10748
10246
|
function isLiteralLikeElementAccess(node) {
|
|
10749
10247
|
return isElementAccessExpression(node) && isStringOrNumericLiteralLike(node.argumentExpression);
|
|
10750
10248
|
}
|
|
@@ -10765,12 +10263,6 @@ function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
|
|
|
10765
10263
|
function isBindableStaticNameExpression(node, excludeThisKeyword) {
|
|
10766
10264
|
return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword);
|
|
10767
10265
|
}
|
|
10768
|
-
function getNameOrArgument(expr) {
|
|
10769
|
-
if (isPropertyAccessExpression(expr)) {
|
|
10770
|
-
return expr.name;
|
|
10771
|
-
}
|
|
10772
|
-
return expr.argumentExpression;
|
|
10773
|
-
}
|
|
10774
10266
|
function getAssignmentDeclarationKindWorker(expr) {
|
|
10775
10267
|
if (isCallExpression(expr)) {
|
|
10776
10268
|
if (!isBindableObjectDefinePropertyCall(expr)) {
|
|
@@ -10860,33 +10352,6 @@ function getInitializerOfBinaryExpression(expr) {
|
|
|
10860
10352
|
}
|
|
10861
10353
|
return expr.right;
|
|
10862
10354
|
}
|
|
10863
|
-
function isSpecialPropertyDeclaration(expr) {
|
|
10864
|
-
return isInJSFile(expr) && expr.parent && expr.parent.kind === 241 /* ExpressionStatement */ && (!isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) && !!getJSDocTypeTag(expr.parent);
|
|
10865
|
-
}
|
|
10866
|
-
function setValueDeclaration(symbol, node) {
|
|
10867
|
-
const { valueDeclaration } = symbol;
|
|
10868
|
-
if (!valueDeclaration || !(node.flags & 16777216 /* Ambient */ && !isInJSFile(node) && !(valueDeclaration.flags & 16777216 /* Ambient */)) && (isAssignmentDeclaration(valueDeclaration) && !isAssignmentDeclaration(node)) || valueDeclaration.kind !== node.kind && isEffectiveModuleDeclaration(valueDeclaration)) {
|
|
10869
|
-
symbol.valueDeclaration = node;
|
|
10870
|
-
}
|
|
10871
|
-
}
|
|
10872
|
-
function isFunctionSymbol(symbol) {
|
|
10873
|
-
if (!symbol || !symbol.valueDeclaration) {
|
|
10874
|
-
return false;
|
|
10875
|
-
}
|
|
10876
|
-
const decl = symbol.valueDeclaration;
|
|
10877
|
-
return decl.kind === 259 /* FunctionDeclaration */ || isVariableDeclaration(decl) && decl.initializer && isFunctionLike(decl.initializer);
|
|
10878
|
-
}
|
|
10879
|
-
function isJSDocConstructSignature(node) {
|
|
10880
|
-
const param = isJSDocFunctionType(node) ? firstOrUndefined(node.parameters) : void 0;
|
|
10881
|
-
const name = tryCast(param && param.name, isIdentifier);
|
|
10882
|
-
return !!name && name.escapedText === "new";
|
|
10883
|
-
}
|
|
10884
|
-
function isJSDocTypeAlias(node) {
|
|
10885
|
-
return node.kind === 349 /* JSDocTypedefTag */ || node.kind === 341 /* JSDocCallbackTag */ || node.kind === 343 /* JSDocEnumTag */;
|
|
10886
|
-
}
|
|
10887
|
-
function getSourceOfAssignment(node) {
|
|
10888
|
-
return isExpressionStatement(node) && isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 63 /* EqualsToken */ ? getRightMostAssignedExpression(node.expression) : void 0;
|
|
10889
|
-
}
|
|
10890
10355
|
function getSourceOfDefaultedAssignment(node) {
|
|
10891
10356
|
return isExpressionStatement(node) && isBinaryExpression(node.expression) && getAssignmentDeclarationKind(node.expression) !== 0 /* None */ && isBinaryExpression(node.expression.right) && (node.expression.right.operatorToken.kind === 56 /* BarBarToken */ || node.expression.right.operatorToken.kind === 60 /* QuestionQuestionToken */) ? node.expression.right.right : void 0;
|
|
10892
10357
|
}
|
|
@@ -11021,149 +10486,19 @@ function getNextJSDocCommentLocation(node) {
|
|
|
11021
10486
|
return parent.parent.parent;
|
|
11022
10487
|
}
|
|
11023
10488
|
}
|
|
11024
|
-
function getEffectiveContainerForJSDocTemplateTag(node) {
|
|
11025
|
-
if (isJSDoc(node.parent) && node.parent.tags) {
|
|
11026
|
-
const typeAlias = find(node.parent.tags, isJSDocTypeAlias);
|
|
11027
|
-
if (typeAlias) {
|
|
11028
|
-
return typeAlias;
|
|
11029
|
-
}
|
|
11030
|
-
}
|
|
11031
|
-
return getHostSignatureFromJSDoc(node);
|
|
11032
|
-
}
|
|
11033
|
-
function getHostSignatureFromJSDoc(node) {
|
|
11034
|
-
const host = getEffectiveJSDocHost(node);
|
|
11035
|
-
if (host) {
|
|
11036
|
-
return isPropertySignature(host) && host.type && isFunctionLike(host.type) ? host.type : isFunctionLike(host) ? host : void 0;
|
|
11037
|
-
}
|
|
11038
|
-
return void 0;
|
|
11039
|
-
}
|
|
11040
|
-
function getEffectiveJSDocHost(node) {
|
|
11041
|
-
const host = getJSDocHost(node);
|
|
11042
|
-
if (host) {
|
|
11043
|
-
return getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(host) || getSingleVariableOfVariableStatement(host) || getNestedModuleDeclaration(host) || host;
|
|
11044
|
-
}
|
|
11045
|
-
}
|
|
11046
|
-
function getJSDocHost(node) {
|
|
11047
|
-
const jsDoc = getJSDocRoot(node);
|
|
11048
|
-
if (!jsDoc) {
|
|
11049
|
-
return void 0;
|
|
11050
|
-
}
|
|
11051
|
-
const host = jsDoc.parent;
|
|
11052
|
-
if (host && host.jsDoc && jsDoc === lastOrUndefined(host.jsDoc)) {
|
|
11053
|
-
return host;
|
|
11054
|
-
}
|
|
11055
|
-
}
|
|
11056
|
-
function getJSDocRoot(node) {
|
|
11057
|
-
return findAncestor(node.parent, isJSDoc);
|
|
11058
|
-
}
|
|
11059
|
-
function getAssignmentTargetKind(node) {
|
|
11060
|
-
let parent = node.parent;
|
|
11061
|
-
while (true) {
|
|
11062
|
-
switch (parent.kind) {
|
|
11063
|
-
case 223 /* BinaryExpression */:
|
|
11064
|
-
const binaryOperator = parent.operatorToken.kind;
|
|
11065
|
-
return isAssignmentOperator(binaryOperator) && parent.left === node ? binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ : 0 /* None */;
|
|
11066
|
-
case 221 /* PrefixUnaryExpression */:
|
|
11067
|
-
case 222 /* PostfixUnaryExpression */:
|
|
11068
|
-
const unaryOperator = parent.operator;
|
|
11069
|
-
return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
|
|
11070
|
-
case 246 /* ForInStatement */:
|
|
11071
|
-
case 247 /* ForOfStatement */:
|
|
11072
|
-
return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
|
|
11073
|
-
case 214 /* ParenthesizedExpression */:
|
|
11074
|
-
case 206 /* ArrayLiteralExpression */:
|
|
11075
|
-
case 227 /* SpreadElement */:
|
|
11076
|
-
case 232 /* NonNullExpression */:
|
|
11077
|
-
node = parent;
|
|
11078
|
-
break;
|
|
11079
|
-
case 301 /* SpreadAssignment */:
|
|
11080
|
-
node = parent.parent;
|
|
11081
|
-
break;
|
|
11082
|
-
case 300 /* ShorthandPropertyAssignment */:
|
|
11083
|
-
if (parent.name !== node) {
|
|
11084
|
-
return 0 /* None */;
|
|
11085
|
-
}
|
|
11086
|
-
node = parent.parent;
|
|
11087
|
-
break;
|
|
11088
|
-
case 299 /* PropertyAssignment */:
|
|
11089
|
-
if (parent.name === node) {
|
|
11090
|
-
return 0 /* None */;
|
|
11091
|
-
}
|
|
11092
|
-
node = parent.parent;
|
|
11093
|
-
break;
|
|
11094
|
-
default:
|
|
11095
|
-
return 0 /* None */;
|
|
11096
|
-
}
|
|
11097
|
-
parent = node.parent;
|
|
11098
|
-
}
|
|
11099
|
-
}
|
|
11100
|
-
function isAssignmentTarget(node) {
|
|
11101
|
-
return getAssignmentTargetKind(node) !== 0 /* None */;
|
|
11102
|
-
}
|
|
11103
10489
|
function skipParentheses(node, excludeJSDocTypeAssertions) {
|
|
11104
10490
|
const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | 16 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */;
|
|
11105
10491
|
return skipOuterExpressions(node, flags);
|
|
11106
10492
|
}
|
|
11107
|
-
function isIdentifierName(node) {
|
|
11108
|
-
const parent = node.parent;
|
|
11109
|
-
switch (parent.kind) {
|
|
11110
|
-
case 169 /* PropertyDeclaration */:
|
|
11111
|
-
case 168 /* PropertySignature */:
|
|
11112
|
-
case 171 /* MethodDeclaration */:
|
|
11113
|
-
case 170 /* MethodSignature */:
|
|
11114
|
-
case 174 /* GetAccessor */:
|
|
11115
|
-
case 175 /* SetAccessor */:
|
|
11116
|
-
case 302 /* EnumMember */:
|
|
11117
|
-
case 299 /* PropertyAssignment */:
|
|
11118
|
-
case 208 /* PropertyAccessExpression */:
|
|
11119
|
-
return parent.name === node;
|
|
11120
|
-
case 163 /* QualifiedName */:
|
|
11121
|
-
return parent.right === node;
|
|
11122
|
-
case 205 /* BindingElement */:
|
|
11123
|
-
case 273 /* ImportSpecifier */:
|
|
11124
|
-
return parent.propertyName === node;
|
|
11125
|
-
case 278 /* ExportSpecifier */:
|
|
11126
|
-
case 288 /* JsxAttribute */:
|
|
11127
|
-
case 282 /* JsxSelfClosingElement */:
|
|
11128
|
-
case 283 /* JsxOpeningElement */:
|
|
11129
|
-
case 284 /* JsxClosingElement */:
|
|
11130
|
-
return true;
|
|
11131
|
-
}
|
|
11132
|
-
return false;
|
|
11133
|
-
}
|
|
11134
|
-
function isAliasableExpression(e) {
|
|
11135
|
-
return isEntityNameExpression(e) || isClassExpression(e);
|
|
11136
|
-
}
|
|
11137
|
-
function exportAssignmentIsAlias(node) {
|
|
11138
|
-
const e = getExportAssignmentExpression(node);
|
|
11139
|
-
return isAliasableExpression(e);
|
|
11140
|
-
}
|
|
11141
|
-
function getExportAssignmentExpression(node) {
|
|
11142
|
-
return isExportAssignment(node) ? node.expression : node.right;
|
|
11143
|
-
}
|
|
11144
10493
|
function isKeyword(token) {
|
|
11145
10494
|
return 81 /* FirstKeyword */ <= token && token <= 162 /* LastKeyword */;
|
|
11146
10495
|
}
|
|
11147
|
-
function isAsyncFunction(node) {
|
|
11148
|
-
switch (node.kind) {
|
|
11149
|
-
case 259 /* FunctionDeclaration */:
|
|
11150
|
-
case 215 /* FunctionExpression */:
|
|
11151
|
-
case 216 /* ArrowFunction */:
|
|
11152
|
-
case 171 /* MethodDeclaration */:
|
|
11153
|
-
return node.body !== void 0 && node.asteriskToken === void 0 && hasSyntacticModifier(node, 512 /* Async */);
|
|
11154
|
-
}
|
|
11155
|
-
return false;
|
|
11156
|
-
}
|
|
11157
10496
|
function isStringOrNumericLiteralLike(node) {
|
|
11158
10497
|
return isStringLiteralLike(node) || isNumericLiteral(node);
|
|
11159
10498
|
}
|
|
11160
10499
|
function isSignedNumericLiteral(node) {
|
|
11161
10500
|
return isPrefixUnaryExpression(node) && (node.operator === 39 /* PlusToken */ || node.operator === 40 /* MinusToken */) && isNumericLiteral(node.operand);
|
|
11162
10501
|
}
|
|
11163
|
-
function hasDynamicName(declaration) {
|
|
11164
|
-
const name = getNameOfDeclaration(declaration);
|
|
11165
|
-
return !!name && isDynamicName(name);
|
|
11166
|
-
}
|
|
11167
10502
|
function isDynamicName(name) {
|
|
11168
10503
|
if (!(name.kind === 164 /* ComputedPropertyName */ || name.kind === 209 /* ElementAccessExpression */)) {
|
|
11169
10504
|
return false;
|
|
@@ -11171,39 +10506,9 @@ function isDynamicName(name) {
|
|
|
11171
10506
|
const expr = isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
|
|
11172
10507
|
return !isStringOrNumericLiteralLike(expr) && !isSignedNumericLiteral(expr);
|
|
11173
10508
|
}
|
|
11174
|
-
function isPropertyNameLiteral(node) {
|
|
11175
|
-
switch (node.kind) {
|
|
11176
|
-
case 79 /* Identifier */:
|
|
11177
|
-
case 10 /* StringLiteral */:
|
|
11178
|
-
case 14 /* NoSubstitutionTemplateLiteral */:
|
|
11179
|
-
case 8 /* NumericLiteral */:
|
|
11180
|
-
return true;
|
|
11181
|
-
default:
|
|
11182
|
-
return false;
|
|
11183
|
-
}
|
|
11184
|
-
}
|
|
11185
10509
|
function getTextOfIdentifierOrLiteral(node) {
|
|
11186
10510
|
return isMemberName(node) ? idText(node) : node.text;
|
|
11187
10511
|
}
|
|
11188
|
-
function getEscapedTextOfIdentifierOrLiteral(node) {
|
|
11189
|
-
return isMemberName(node) ? node.escapedText : escapeLeadingUnderscores(node.text);
|
|
11190
|
-
}
|
|
11191
|
-
function getSymbolNameForPrivateIdentifier(containingClassSymbol, description) {
|
|
11192
|
-
return `__#${getSymbolId(containingClassSymbol)}@${description}`;
|
|
11193
|
-
}
|
|
11194
|
-
function isPushOrUnshiftIdentifier(node) {
|
|
11195
|
-
return node.escapedText === "push" || node.escapedText === "unshift";
|
|
11196
|
-
}
|
|
11197
|
-
function isParameterDeclaration(node) {
|
|
11198
|
-
const root = getRootDeclaration(node);
|
|
11199
|
-
return root.kind === 166 /* Parameter */;
|
|
11200
|
-
}
|
|
11201
|
-
function getRootDeclaration(node) {
|
|
11202
|
-
while (node.kind === 205 /* BindingElement */) {
|
|
11203
|
-
node = node.parent.parent;
|
|
11204
|
-
}
|
|
11205
|
-
return node;
|
|
11206
|
-
}
|
|
11207
10512
|
function nodeIsSynthesized(range) {
|
|
11208
10513
|
return positionIsSynthesized(range.pos) || positionIsSynthesized(range.end);
|
|
11209
10514
|
}
|
|
@@ -11459,15 +10764,6 @@ function identifierIsThisKeyword(id) {
|
|
|
11459
10764
|
function hasSyntacticModifier(node, flags) {
|
|
11460
10765
|
return !!getSelectedSyntacticModifierFlags(node, flags);
|
|
11461
10766
|
}
|
|
11462
|
-
function isStatic(node) {
|
|
11463
|
-
return isClassElement(node) && hasStaticModifier(node) || isClassStaticBlockDeclaration(node);
|
|
11464
|
-
}
|
|
11465
|
-
function hasStaticModifier(node) {
|
|
11466
|
-
return hasSyntacticModifier(node, 32 /* Static */);
|
|
11467
|
-
}
|
|
11468
|
-
function hasAccessorModifier(node) {
|
|
11469
|
-
return hasSyntacticModifier(node, 128 /* Accessor */);
|
|
11470
|
-
}
|
|
11471
10767
|
function getSelectedSyntacticModifierFlags(node, flags) {
|
|
11472
10768
|
return getSyntacticModifierFlags(node) & flags;
|
|
11473
10769
|
}
|
|
@@ -11483,13 +10779,6 @@ function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
|
|
|
11483
10779
|
}
|
|
11484
10780
|
return node.modifierFlagsCache & ~(536870912 /* HasComputedFlags */ | 4096 /* HasComputedJSDocModifiers */);
|
|
11485
10781
|
}
|
|
11486
|
-
function getEffectiveModifierFlags(node) {
|
|
11487
|
-
return getModifierFlagsWorker(
|
|
11488
|
-
node,
|
|
11489
|
-
/*includeJSDoc*/
|
|
11490
|
-
true
|
|
11491
|
-
);
|
|
11492
|
-
}
|
|
11493
10782
|
function getSyntacticModifierFlags(node) {
|
|
11494
10783
|
return getModifierFlagsWorker(
|
|
11495
10784
|
node,
|
|
@@ -11573,53 +10862,24 @@ function modifierToFlag(token) {
|
|
|
11573
10862
|
}
|
|
11574
10863
|
return 0 /* None */;
|
|
11575
10864
|
}
|
|
11576
|
-
function isBinaryLogicalOperator(token) {
|
|
11577
|
-
return token === 56 /* BarBarToken */ || token === 55 /* AmpersandAmpersandToken */;
|
|
11578
|
-
}
|
|
11579
10865
|
function isLogicalOrCoalescingAssignmentOperator(token) {
|
|
11580
10866
|
return token === 75 /* BarBarEqualsToken */ || token === 76 /* AmpersandAmpersandEqualsToken */ || token === 77 /* QuestionQuestionEqualsToken */;
|
|
11581
10867
|
}
|
|
11582
|
-
function isLogicalOrCoalescingAssignmentExpression(expr) {
|
|
11583
|
-
return isBinaryExpression(expr) && isLogicalOrCoalescingAssignmentOperator(expr.operatorToken.kind);
|
|
11584
|
-
}
|
|
11585
|
-
function isLogicalOrCoalescingBinaryOperator(token) {
|
|
11586
|
-
return isBinaryLogicalOperator(token) || token === 60 /* QuestionQuestionToken */;
|
|
11587
|
-
}
|
|
11588
|
-
function isLogicalOrCoalescingBinaryExpression(expr) {
|
|
11589
|
-
return isBinaryExpression(expr) && isLogicalOrCoalescingBinaryOperator(expr.operatorToken.kind);
|
|
11590
|
-
}
|
|
11591
10868
|
function isAssignmentOperator(token) {
|
|
11592
10869
|
return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
|
|
11593
10870
|
}
|
|
11594
10871
|
function isAssignmentExpression(node, excludeCompoundAssignment) {
|
|
11595
10872
|
return isBinaryExpression(node) && (excludeCompoundAssignment ? node.operatorToken.kind === 63 /* EqualsToken */ : isAssignmentOperator(node.operatorToken.kind)) && isLeftHandSideExpression(node.left);
|
|
11596
10873
|
}
|
|
11597
|
-
function isDestructuringAssignment(node) {
|
|
11598
|
-
if (isAssignmentExpression(
|
|
11599
|
-
node,
|
|
11600
|
-
/*excludeCompoundAssignment*/
|
|
11601
|
-
true
|
|
11602
|
-
)) {
|
|
11603
|
-
const kind = node.left.kind;
|
|
11604
|
-
return kind === 207 /* ObjectLiteralExpression */ || kind === 206 /* ArrayLiteralExpression */;
|
|
11605
|
-
}
|
|
11606
|
-
return false;
|
|
11607
|
-
}
|
|
11608
10874
|
function isEntityNameExpression(node) {
|
|
11609
10875
|
return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
|
|
11610
10876
|
}
|
|
11611
|
-
function isDottedName(node) {
|
|
11612
|
-
return node.kind === 79 /* Identifier */ || node.kind === 108 /* ThisKeyword */ || node.kind === 106 /* SuperKeyword */ || node.kind === 233 /* MetaProperty */ || node.kind === 208 /* PropertyAccessExpression */ && isDottedName(node.expression) || node.kind === 214 /* ParenthesizedExpression */ && isDottedName(node.expression);
|
|
11613
|
-
}
|
|
11614
10877
|
function isPropertyAccessEntityNameExpression(node) {
|
|
11615
10878
|
return isPropertyAccessExpression(node) && isIdentifier(node.name) && isEntityNameExpression(node.expression);
|
|
11616
10879
|
}
|
|
11617
10880
|
function isPrototypeAccess(node) {
|
|
11618
10881
|
return isBindableStaticAccessExpression(node) && getElementOrPropertyAccessName(node) === "prototype";
|
|
11619
10882
|
}
|
|
11620
|
-
function isEmptyObjectLiteral(expression) {
|
|
11621
|
-
return expression.kind === 207 /* ObjectLiteralExpression */ && expression.properties.length === 0;
|
|
11622
|
-
}
|
|
11623
10883
|
function tryExtractTSExtension(fileName) {
|
|
11624
10884
|
return find(supportedTSExtensionsForExtractExtension, (extension) => fileExtensionIs(fileName, extension));
|
|
11625
10885
|
}
|
|
@@ -11668,12 +10928,6 @@ function isTypeNodeKind(kind) {
|
|
|
11668
10928
|
function isAccessExpression(node) {
|
|
11669
10929
|
return node.kind === 208 /* PropertyAccessExpression */ || node.kind === 209 /* ElementAccessExpression */;
|
|
11670
10930
|
}
|
|
11671
|
-
function getLeftmostAccessExpression(expr) {
|
|
11672
|
-
while (isAccessExpression(expr)) {
|
|
11673
|
-
expr = expr.expression;
|
|
11674
|
-
}
|
|
11675
|
-
return expr;
|
|
11676
|
-
}
|
|
11677
10931
|
function getLeftmostExpression(node, stopAtCallExpressions) {
|
|
11678
10932
|
while (true) {
|
|
11679
10933
|
switch (node.kind) {
|
|
@@ -11923,12 +11177,6 @@ function getEmitModuleResolutionKind(compilerOptions) {
|
|
|
11923
11177
|
function getIsolatedModules(options) {
|
|
11924
11178
|
return !!(options.isolatedModules || options.verbatimModuleSyntax);
|
|
11925
11179
|
}
|
|
11926
|
-
function unreachableCodeIsError(options) {
|
|
11927
|
-
return options.allowUnreachableCode === false;
|
|
11928
|
-
}
|
|
11929
|
-
function unusedLabelIsError(options) {
|
|
11930
|
-
return options.allowUnusedLabels === false;
|
|
11931
|
-
}
|
|
11932
11180
|
function moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution) {
|
|
11933
11181
|
return moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */;
|
|
11934
11182
|
}
|
|
@@ -11938,12 +11186,6 @@ function getResolveJsonModule(compilerOptions) {
|
|
|
11938
11186
|
}
|
|
11939
11187
|
return getEmitModuleResolutionKind(compilerOptions) === 100 /* Bundler */;
|
|
11940
11188
|
}
|
|
11941
|
-
function shouldPreserveConstEnums(compilerOptions) {
|
|
11942
|
-
return !!(compilerOptions.preserveConstEnums || getIsolatedModules(compilerOptions));
|
|
11943
|
-
}
|
|
11944
|
-
function getStrictOptionValue(compilerOptions, flag) {
|
|
11945
|
-
return compilerOptions[flag] === void 0 ? !!compilerOptions.strict : !!compilerOptions[flag];
|
|
11946
|
-
}
|
|
11947
11189
|
var reservedCharacterPattern = /[^\w\s\/]/g;
|
|
11948
11190
|
var wildcardCharCodes = [42 /* asterisk */, 63 /* question */];
|
|
11949
11191
|
var commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"];
|
|
@@ -12231,11 +11473,6 @@ function matchPatternOrExact(patternOrStrings, candidate) {
|
|
|
12231
11473
|
}
|
|
12232
11474
|
return findBestPatternMatch(patterns, (_) => _, candidate);
|
|
12233
11475
|
}
|
|
12234
|
-
function sliceAfter(arr, value) {
|
|
12235
|
-
const index = arr.indexOf(value);
|
|
12236
|
-
Debug.assert(index !== -1);
|
|
12237
|
-
return arr.slice(index);
|
|
12238
|
-
}
|
|
12239
11476
|
function addRelatedInfo(diagnostic, ...relatedInformation) {
|
|
12240
11477
|
if (!relatedInformation.length) {
|
|
12241
11478
|
return diagnostic;
|
|
@@ -17556,9 +16793,6 @@ function isMethodSignature(node) {
|
|
|
17556
16793
|
function isMethodDeclaration(node) {
|
|
17557
16794
|
return node.kind === 171 /* MethodDeclaration */;
|
|
17558
16795
|
}
|
|
17559
|
-
function isClassStaticBlockDeclaration(node) {
|
|
17560
|
-
return node.kind === 172 /* ClassStaticBlockDeclaration */;
|
|
17561
|
-
}
|
|
17562
16796
|
function isConstructorDeclaration(node) {
|
|
17563
16797
|
return node.kind === 173 /* Constructor */;
|
|
17564
16798
|
}
|
|
@@ -17682,9 +16916,6 @@ function isFunctionExpression(node) {
|
|
|
17682
16916
|
function isArrowFunction(node) {
|
|
17683
16917
|
return node.kind === 216 /* ArrowFunction */;
|
|
17684
16918
|
}
|
|
17685
|
-
function isTypeOfExpression(node) {
|
|
17686
|
-
return node.kind === 218 /* TypeOfExpression */;
|
|
17687
|
-
}
|
|
17688
16919
|
function isVoidExpression(node) {
|
|
17689
16920
|
return node.kind === 219 /* VoidExpression */;
|
|
17690
16921
|
}
|
|
@@ -17754,9 +16985,6 @@ function isEnumDeclaration(node) {
|
|
|
17754
16985
|
function isModuleDeclaration(node) {
|
|
17755
16986
|
return node.kind === 264 /* ModuleDeclaration */;
|
|
17756
16987
|
}
|
|
17757
|
-
function isModuleBlock(node) {
|
|
17758
|
-
return node.kind === 265 /* ModuleBlock */;
|
|
17759
|
-
}
|
|
17760
16988
|
function isCaseBlock(node) {
|
|
17761
16989
|
return node.kind === 266 /* CaseBlock */;
|
|
17762
16990
|
}
|
|
@@ -17778,9 +17006,6 @@ function isAssertClause(node) {
|
|
|
17778
17006
|
function isAssertEntry(node) {
|
|
17779
17007
|
return node.kind === 297 /* AssertEntry */;
|
|
17780
17008
|
}
|
|
17781
|
-
function isNamespaceExport(node) {
|
|
17782
|
-
return node.kind === 277 /* NamespaceExport */;
|
|
17783
|
-
}
|
|
17784
17009
|
function isImportSpecifier(node) {
|
|
17785
17010
|
return node.kind === 273 /* ImportSpecifier */;
|
|
17786
17011
|
}
|
|
@@ -17826,9 +17051,6 @@ function isCatchClause(node) {
|
|
|
17826
17051
|
function isPropertyAssignment(node) {
|
|
17827
17052
|
return node.kind === 299 /* PropertyAssignment */;
|
|
17828
17053
|
}
|
|
17829
|
-
function isShorthandPropertyAssignment(node) {
|
|
17830
|
-
return node.kind === 300 /* ShorthandPropertyAssignment */;
|
|
17831
|
-
}
|
|
17832
17054
|
function isEnumMember(node) {
|
|
17833
17055
|
return node.kind === 302 /* EnumMember */;
|
|
17834
17056
|
}
|
|
@@ -17865,9 +17087,6 @@ function isJSDocOverrideTag(node) {
|
|
|
17865
17087
|
function isJSDocDeprecatedTag(node) {
|
|
17866
17088
|
return node.kind === 334 /* JSDocDeprecatedTag */;
|
|
17867
17089
|
}
|
|
17868
|
-
function isJSDocEnumTag(node) {
|
|
17869
|
-
return node.kind === 343 /* JSDocEnumTag */;
|
|
17870
|
-
}
|
|
17871
17090
|
function isJSDocParameterTag(node) {
|
|
17872
17091
|
return node.kind === 344 /* JSDocParameterTag */;
|
|
17873
17092
|
}
|
|
@@ -18162,32 +17381,6 @@ var BinaryExpressionState;
|
|
|
18162
17381
|
}
|
|
18163
17382
|
}
|
|
18164
17383
|
})(BinaryExpressionState || (BinaryExpressionState = {}));
|
|
18165
|
-
var BinaryExpressionStateMachine = class {
|
|
18166
|
-
constructor(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
|
|
18167
|
-
this.onEnter = onEnter;
|
|
18168
|
-
this.onLeft = onLeft;
|
|
18169
|
-
this.onOperator = onOperator;
|
|
18170
|
-
this.onRight = onRight;
|
|
18171
|
-
this.onExit = onExit;
|
|
18172
|
-
this.foldState = foldState;
|
|
18173
|
-
}
|
|
18174
|
-
};
|
|
18175
|
-
function createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
|
|
18176
|
-
const machine = new BinaryExpressionStateMachine(onEnter, onLeft, onOperator, onRight, onExit, foldState);
|
|
18177
|
-
return trampoline;
|
|
18178
|
-
function trampoline(node, outerState) {
|
|
18179
|
-
const resultHolder = { value: void 0 };
|
|
18180
|
-
const stateStack = [BinaryExpressionState.enter];
|
|
18181
|
-
const nodeStack = [node];
|
|
18182
|
-
const userStateStack = [void 0];
|
|
18183
|
-
let stackIndex = 0;
|
|
18184
|
-
while (stateStack[stackIndex] !== BinaryExpressionState.done) {
|
|
18185
|
-
stackIndex = stateStack[stackIndex](machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, outerState);
|
|
18186
|
-
}
|
|
18187
|
-
Debug.assertEqual(stackIndex, 0);
|
|
18188
|
-
return resultHolder.value;
|
|
18189
|
-
}
|
|
18190
|
-
}
|
|
18191
17384
|
function formatGeneratedNamePart(part, generateName) {
|
|
18192
17385
|
return typeof part === "object" ? formatGeneratedName(
|
|
18193
17386
|
/*privateName*/
|
|
@@ -29633,2870 +28826,7 @@ function traceIfEnabled(state, diagnostic, ...args) {
|
|
|
29633
28826
|
}
|
|
29634
28827
|
}
|
|
29635
28828
|
|
|
29636
|
-
// src/compiler/binder.ts
|
|
29637
|
-
function getModuleInstanceState(node, visited) {
|
|
29638
|
-
if (node.body && !node.body.parent) {
|
|
29639
|
-
setParent(node.body, node);
|
|
29640
|
-
setParentRecursive(
|
|
29641
|
-
node.body,
|
|
29642
|
-
/*incremental*/
|
|
29643
|
-
false
|
|
29644
|
-
);
|
|
29645
|
-
}
|
|
29646
|
-
return node.body ? getModuleInstanceStateCached(node.body, visited) : 1 /* Instantiated */;
|
|
29647
|
-
}
|
|
29648
|
-
function getModuleInstanceStateCached(node, visited = /* @__PURE__ */ new Map()) {
|
|
29649
|
-
const nodeId = getNodeId(node);
|
|
29650
|
-
if (visited.has(nodeId)) {
|
|
29651
|
-
return visited.get(nodeId) || 0 /* NonInstantiated */;
|
|
29652
|
-
}
|
|
29653
|
-
visited.set(nodeId, void 0);
|
|
29654
|
-
const result = getModuleInstanceStateWorker(node, visited);
|
|
29655
|
-
visited.set(nodeId, result);
|
|
29656
|
-
return result;
|
|
29657
|
-
}
|
|
29658
|
-
function getModuleInstanceStateWorker(node, visited) {
|
|
29659
|
-
switch (node.kind) {
|
|
29660
|
-
case 261 /* InterfaceDeclaration */:
|
|
29661
|
-
case 262 /* TypeAliasDeclaration */:
|
|
29662
|
-
return 0 /* NonInstantiated */;
|
|
29663
|
-
case 263 /* EnumDeclaration */:
|
|
29664
|
-
if (isEnumConst(node)) {
|
|
29665
|
-
return 2 /* ConstEnumOnly */;
|
|
29666
|
-
}
|
|
29667
|
-
break;
|
|
29668
|
-
case 269 /* ImportDeclaration */:
|
|
29669
|
-
case 268 /* ImportEqualsDeclaration */:
|
|
29670
|
-
if (!hasSyntacticModifier(node, 1 /* Export */)) {
|
|
29671
|
-
return 0 /* NonInstantiated */;
|
|
29672
|
-
}
|
|
29673
|
-
break;
|
|
29674
|
-
case 275 /* ExportDeclaration */:
|
|
29675
|
-
const exportDeclaration = node;
|
|
29676
|
-
if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 276 /* NamedExports */) {
|
|
29677
|
-
let state = 0 /* NonInstantiated */;
|
|
29678
|
-
for (const specifier of exportDeclaration.exportClause.elements) {
|
|
29679
|
-
const specifierState = getModuleInstanceStateForAliasTarget(specifier, visited);
|
|
29680
|
-
if (specifierState > state) {
|
|
29681
|
-
state = specifierState;
|
|
29682
|
-
}
|
|
29683
|
-
if (state === 1 /* Instantiated */) {
|
|
29684
|
-
return state;
|
|
29685
|
-
}
|
|
29686
|
-
}
|
|
29687
|
-
return state;
|
|
29688
|
-
}
|
|
29689
|
-
break;
|
|
29690
|
-
case 265 /* ModuleBlock */: {
|
|
29691
|
-
let state = 0 /* NonInstantiated */;
|
|
29692
|
-
forEachChild(node, (n) => {
|
|
29693
|
-
const childState = getModuleInstanceStateCached(n, visited);
|
|
29694
|
-
switch (childState) {
|
|
29695
|
-
case 0 /* NonInstantiated */:
|
|
29696
|
-
return;
|
|
29697
|
-
case 2 /* ConstEnumOnly */:
|
|
29698
|
-
state = 2 /* ConstEnumOnly */;
|
|
29699
|
-
return;
|
|
29700
|
-
case 1 /* Instantiated */:
|
|
29701
|
-
state = 1 /* Instantiated */;
|
|
29702
|
-
return true;
|
|
29703
|
-
default:
|
|
29704
|
-
Debug.assertNever(childState);
|
|
29705
|
-
}
|
|
29706
|
-
});
|
|
29707
|
-
return state;
|
|
29708
|
-
}
|
|
29709
|
-
case 264 /* ModuleDeclaration */:
|
|
29710
|
-
return getModuleInstanceState(node, visited);
|
|
29711
|
-
case 79 /* Identifier */:
|
|
29712
|
-
if (node.flags & 2048 /* IdentifierIsInJSDocNamespace */) {
|
|
29713
|
-
return 0 /* NonInstantiated */;
|
|
29714
|
-
}
|
|
29715
|
-
}
|
|
29716
|
-
return 1 /* Instantiated */;
|
|
29717
|
-
}
|
|
29718
|
-
function getModuleInstanceStateForAliasTarget(specifier, visited) {
|
|
29719
|
-
const name = specifier.propertyName || specifier.name;
|
|
29720
|
-
let p = specifier.parent;
|
|
29721
|
-
while (p) {
|
|
29722
|
-
if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) {
|
|
29723
|
-
const statements = p.statements;
|
|
29724
|
-
let found;
|
|
29725
|
-
for (const statement of statements) {
|
|
29726
|
-
if (nodeHasName(statement, name)) {
|
|
29727
|
-
if (!statement.parent) {
|
|
29728
|
-
setParent(statement, p);
|
|
29729
|
-
setParentRecursive(
|
|
29730
|
-
statement,
|
|
29731
|
-
/*incremental*/
|
|
29732
|
-
false
|
|
29733
|
-
);
|
|
29734
|
-
}
|
|
29735
|
-
const state = getModuleInstanceStateCached(statement, visited);
|
|
29736
|
-
if (found === void 0 || state > found) {
|
|
29737
|
-
found = state;
|
|
29738
|
-
}
|
|
29739
|
-
if (found === 1 /* Instantiated */) {
|
|
29740
|
-
return found;
|
|
29741
|
-
}
|
|
29742
|
-
}
|
|
29743
|
-
}
|
|
29744
|
-
if (found !== void 0) {
|
|
29745
|
-
return found;
|
|
29746
|
-
}
|
|
29747
|
-
}
|
|
29748
|
-
p = p.parent;
|
|
29749
|
-
}
|
|
29750
|
-
return 1 /* Instantiated */;
|
|
29751
|
-
}
|
|
29752
|
-
function initFlowNode(node) {
|
|
29753
|
-
Debug.attachFlowNodeDebugInfo(node);
|
|
29754
|
-
return node;
|
|
29755
|
-
}
|
|
29756
|
-
var binder = createBinder();
|
|
29757
|
-
function createBinder() {
|
|
29758
|
-
var file;
|
|
29759
|
-
var options;
|
|
29760
|
-
var languageVersion;
|
|
29761
|
-
var parent;
|
|
29762
|
-
var container;
|
|
29763
|
-
var thisParentContainer;
|
|
29764
|
-
var blockScopeContainer;
|
|
29765
|
-
var lastContainer;
|
|
29766
|
-
var delayedTypeAliases;
|
|
29767
|
-
var seenThisKeyword;
|
|
29768
|
-
var currentFlow;
|
|
29769
|
-
var currentBreakTarget;
|
|
29770
|
-
var currentContinueTarget;
|
|
29771
|
-
var currentReturnTarget;
|
|
29772
|
-
var currentTrueTarget;
|
|
29773
|
-
var currentFalseTarget;
|
|
29774
|
-
var currentExceptionTarget;
|
|
29775
|
-
var preSwitchCaseFlow;
|
|
29776
|
-
var activeLabelList;
|
|
29777
|
-
var hasExplicitReturn;
|
|
29778
|
-
var emitFlags;
|
|
29779
|
-
var inStrictMode;
|
|
29780
|
-
var inAssignmentPattern = false;
|
|
29781
|
-
var symbolCount = 0;
|
|
29782
|
-
var Symbol12;
|
|
29783
|
-
var classifiableNames;
|
|
29784
|
-
var unreachableFlow = { flags: 1 /* Unreachable */ };
|
|
29785
|
-
var reportedUnreachableFlow = { flags: 1 /* Unreachable */ };
|
|
29786
|
-
var bindBinaryExpressionFlow = createBindBinaryExpressionFlow();
|
|
29787
|
-
return bindSourceFile2;
|
|
29788
|
-
function createDiagnosticForNode2(node, message, arg0, arg1, arg2) {
|
|
29789
|
-
return createDiagnosticForNodeInSourceFile(getSourceFileOfNode(node) || file, node, message, arg0, arg1, arg2);
|
|
29790
|
-
}
|
|
29791
|
-
function bindSourceFile2(f, opts) {
|
|
29792
|
-
var _a2, _b;
|
|
29793
|
-
file = f;
|
|
29794
|
-
options = opts;
|
|
29795
|
-
languageVersion = getEmitScriptTarget(options);
|
|
29796
|
-
inStrictMode = bindInStrictMode(file, opts);
|
|
29797
|
-
classifiableNames = /* @__PURE__ */ new Set();
|
|
29798
|
-
symbolCount = 0;
|
|
29799
|
-
Symbol12 = objectAllocator.getSymbolConstructor();
|
|
29800
|
-
Debug.attachFlowNodeDebugInfo(unreachableFlow);
|
|
29801
|
-
Debug.attachFlowNodeDebugInfo(reportedUnreachableFlow);
|
|
29802
|
-
if (!file.locals) {
|
|
29803
|
-
(_a2 = tracing) == null ? void 0 : _a2.push(
|
|
29804
|
-
tracing.Phase.Bind,
|
|
29805
|
-
"bindSourceFile",
|
|
29806
|
-
{ path: file.path },
|
|
29807
|
-
/*separateBeginAndEnd*/
|
|
29808
|
-
true
|
|
29809
|
-
);
|
|
29810
|
-
bind(file);
|
|
29811
|
-
(_b = tracing) == null ? void 0 : _b.pop();
|
|
29812
|
-
file.symbolCount = symbolCount;
|
|
29813
|
-
file.classifiableNames = classifiableNames;
|
|
29814
|
-
delayedBindJSDocTypedefTag();
|
|
29815
|
-
}
|
|
29816
|
-
file = void 0;
|
|
29817
|
-
options = void 0;
|
|
29818
|
-
languageVersion = void 0;
|
|
29819
|
-
parent = void 0;
|
|
29820
|
-
container = void 0;
|
|
29821
|
-
thisParentContainer = void 0;
|
|
29822
|
-
blockScopeContainer = void 0;
|
|
29823
|
-
lastContainer = void 0;
|
|
29824
|
-
delayedTypeAliases = void 0;
|
|
29825
|
-
seenThisKeyword = false;
|
|
29826
|
-
currentFlow = void 0;
|
|
29827
|
-
currentBreakTarget = void 0;
|
|
29828
|
-
currentContinueTarget = void 0;
|
|
29829
|
-
currentReturnTarget = void 0;
|
|
29830
|
-
currentTrueTarget = void 0;
|
|
29831
|
-
currentFalseTarget = void 0;
|
|
29832
|
-
currentExceptionTarget = void 0;
|
|
29833
|
-
activeLabelList = void 0;
|
|
29834
|
-
hasExplicitReturn = false;
|
|
29835
|
-
inAssignmentPattern = false;
|
|
29836
|
-
emitFlags = 0 /* None */;
|
|
29837
|
-
}
|
|
29838
|
-
function bindInStrictMode(file2, opts) {
|
|
29839
|
-
if (getStrictOptionValue(opts, "alwaysStrict") && !file2.isDeclarationFile) {
|
|
29840
|
-
return true;
|
|
29841
|
-
} else {
|
|
29842
|
-
return !!file2.externalModuleIndicator;
|
|
29843
|
-
}
|
|
29844
|
-
}
|
|
29845
|
-
function createSymbol(flags, name) {
|
|
29846
|
-
symbolCount++;
|
|
29847
|
-
return new Symbol12(flags, name);
|
|
29848
|
-
}
|
|
29849
|
-
function addDeclarationToSymbol(symbol, node, symbolFlags) {
|
|
29850
|
-
symbol.flags |= symbolFlags;
|
|
29851
|
-
node.symbol = symbol;
|
|
29852
|
-
symbol.declarations = appendIfUnique(symbol.declarations, node);
|
|
29853
|
-
if (symbolFlags & (32 /* Class */ | 384 /* Enum */ | 1536 /* Module */ | 3 /* Variable */) && !symbol.exports) {
|
|
29854
|
-
symbol.exports = createSymbolTable();
|
|
29855
|
-
}
|
|
29856
|
-
if (symbolFlags & (32 /* Class */ | 64 /* Interface */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && !symbol.members) {
|
|
29857
|
-
symbol.members = createSymbolTable();
|
|
29858
|
-
}
|
|
29859
|
-
if (symbol.constEnumOnlyModule && symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) {
|
|
29860
|
-
symbol.constEnumOnlyModule = false;
|
|
29861
|
-
}
|
|
29862
|
-
if (symbolFlags & 111551 /* Value */) {
|
|
29863
|
-
setValueDeclaration(symbol, node);
|
|
29864
|
-
}
|
|
29865
|
-
}
|
|
29866
|
-
function getDeclarationName(node) {
|
|
29867
|
-
if (node.kind === 274 /* ExportAssignment */) {
|
|
29868
|
-
return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
|
|
29869
|
-
}
|
|
29870
|
-
const name = getNameOfDeclaration(node);
|
|
29871
|
-
if (name) {
|
|
29872
|
-
if (isAmbientModule(node)) {
|
|
29873
|
-
const moduleName = getTextOfIdentifierOrLiteral(name);
|
|
29874
|
-
return isGlobalScopeAugmentation(node) ? "__global" : `"${moduleName}"`;
|
|
29875
|
-
}
|
|
29876
|
-
if (name.kind === 164 /* ComputedPropertyName */) {
|
|
29877
|
-
const nameExpression = name.expression;
|
|
29878
|
-
if (isStringOrNumericLiteralLike(nameExpression)) {
|
|
29879
|
-
return escapeLeadingUnderscores(nameExpression.text);
|
|
29880
|
-
}
|
|
29881
|
-
if (isSignedNumericLiteral(nameExpression)) {
|
|
29882
|
-
return tokenToString(nameExpression.operator) + nameExpression.operand.text;
|
|
29883
|
-
} else {
|
|
29884
|
-
Debug.fail("Only computed properties with literal names have declaration names");
|
|
29885
|
-
}
|
|
29886
|
-
}
|
|
29887
|
-
if (isPrivateIdentifier(name)) {
|
|
29888
|
-
const containingClass = getContainingClass(node);
|
|
29889
|
-
if (!containingClass) {
|
|
29890
|
-
return void 0;
|
|
29891
|
-
}
|
|
29892
|
-
const containingClassSymbol = containingClass.symbol;
|
|
29893
|
-
return getSymbolNameForPrivateIdentifier(containingClassSymbol, name.escapedText);
|
|
29894
|
-
}
|
|
29895
|
-
return isPropertyNameLiteral(name) ? getEscapedTextOfIdentifierOrLiteral(name) : void 0;
|
|
29896
|
-
}
|
|
29897
|
-
switch (node.kind) {
|
|
29898
|
-
case 173 /* Constructor */:
|
|
29899
|
-
return "__constructor" /* Constructor */;
|
|
29900
|
-
case 181 /* FunctionType */:
|
|
29901
|
-
case 176 /* CallSignature */:
|
|
29902
|
-
case 326 /* JSDocSignature */:
|
|
29903
|
-
return "__call" /* Call */;
|
|
29904
|
-
case 182 /* ConstructorType */:
|
|
29905
|
-
case 177 /* ConstructSignature */:
|
|
29906
|
-
return "__new" /* New */;
|
|
29907
|
-
case 178 /* IndexSignature */:
|
|
29908
|
-
return "__index" /* Index */;
|
|
29909
|
-
case 275 /* ExportDeclaration */:
|
|
29910
|
-
return "__export" /* ExportStar */;
|
|
29911
|
-
case 308 /* SourceFile */:
|
|
29912
|
-
return "export=" /* ExportEquals */;
|
|
29913
|
-
case 223 /* BinaryExpression */:
|
|
29914
|
-
if (getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
|
|
29915
|
-
return "export=" /* ExportEquals */;
|
|
29916
|
-
}
|
|
29917
|
-
Debug.fail("Unknown binary declaration kind");
|
|
29918
|
-
break;
|
|
29919
|
-
case 320 /* JSDocFunctionType */:
|
|
29920
|
-
return isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */;
|
|
29921
|
-
case 166 /* Parameter */:
|
|
29922
|
-
Debug.assert(node.parent.kind === 320 /* JSDocFunctionType */, "Impossible parameter parent kind", () => `parent is: ${Debug.formatSyntaxKind(node.parent.kind)}, expected JSDocFunctionType`);
|
|
29923
|
-
const functionType = node.parent;
|
|
29924
|
-
const index = functionType.parameters.indexOf(node);
|
|
29925
|
-
return "arg" + index;
|
|
29926
|
-
}
|
|
29927
|
-
}
|
|
29928
|
-
function getDisplayName(node) {
|
|
29929
|
-
return isNamedDeclaration(node) ? declarationNameToString(node.name) : unescapeLeadingUnderscores(Debug.checkDefined(getDeclarationName(node)));
|
|
29930
|
-
}
|
|
29931
|
-
function declareSymbol(symbolTable, parent2, node, includes, excludes, isReplaceableByMethod, isComputedName) {
|
|
29932
|
-
Debug.assert(isComputedName || !hasDynamicName(node));
|
|
29933
|
-
const isDefaultExport = hasSyntacticModifier(node, 1024 /* Default */) || isExportSpecifier(node) && node.name.escapedText === "default";
|
|
29934
|
-
const name = isComputedName ? "__computed" /* Computed */ : isDefaultExport && parent2 ? "default" /* Default */ : getDeclarationName(node);
|
|
29935
|
-
let symbol;
|
|
29936
|
-
if (name === void 0) {
|
|
29937
|
-
symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
|
|
29938
|
-
} else {
|
|
29939
|
-
symbol = symbolTable.get(name);
|
|
29940
|
-
if (includes & 2885600 /* Classifiable */) {
|
|
29941
|
-
classifiableNames.add(name);
|
|
29942
|
-
}
|
|
29943
|
-
if (!symbol) {
|
|
29944
|
-
symbolTable.set(name, symbol = createSymbol(0 /* None */, name));
|
|
29945
|
-
if (isReplaceableByMethod)
|
|
29946
|
-
symbol.isReplaceableByMethod = true;
|
|
29947
|
-
} else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) {
|
|
29948
|
-
return symbol;
|
|
29949
|
-
} else if (symbol.flags & excludes) {
|
|
29950
|
-
if (symbol.isReplaceableByMethod) {
|
|
29951
|
-
symbolTable.set(name, symbol = createSymbol(0 /* None */, name));
|
|
29952
|
-
} else if (!(includes & 3 /* Variable */ && symbol.flags & 67108864 /* Assignment */)) {
|
|
29953
|
-
if (isNamedDeclaration(node)) {
|
|
29954
|
-
setParent(node.name, node);
|
|
29955
|
-
}
|
|
29956
|
-
let message = symbol.flags & 2 /* BlockScopedVariable */ ? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0;
|
|
29957
|
-
let messageNeedsName = true;
|
|
29958
|
-
if (symbol.flags & 384 /* Enum */ || includes & 384 /* Enum */) {
|
|
29959
|
-
message = Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations;
|
|
29960
|
-
messageNeedsName = false;
|
|
29961
|
-
}
|
|
29962
|
-
let multipleDefaultExports = false;
|
|
29963
|
-
if (length(symbol.declarations)) {
|
|
29964
|
-
if (isDefaultExport) {
|
|
29965
|
-
message = Diagnostics.A_module_cannot_have_multiple_default_exports;
|
|
29966
|
-
messageNeedsName = false;
|
|
29967
|
-
multipleDefaultExports = true;
|
|
29968
|
-
} else {
|
|
29969
|
-
if (symbol.declarations && symbol.declarations.length && (node.kind === 274 /* ExportAssignment */ && !node.isExportEquals)) {
|
|
29970
|
-
message = Diagnostics.A_module_cannot_have_multiple_default_exports;
|
|
29971
|
-
messageNeedsName = false;
|
|
29972
|
-
multipleDefaultExports = true;
|
|
29973
|
-
}
|
|
29974
|
-
}
|
|
29975
|
-
}
|
|
29976
|
-
const relatedInformation = [];
|
|
29977
|
-
if (isTypeAliasDeclaration(node) && nodeIsMissing(node.type) && hasSyntacticModifier(node, 1 /* Export */) && symbol.flags & (2097152 /* Alias */ | 788968 /* Type */ | 1920 /* Namespace */)) {
|
|
29978
|
-
relatedInformation.push(createDiagnosticForNode2(node, Diagnostics.Did_you_mean_0, `export type { ${unescapeLeadingUnderscores(node.name.escapedText)} }`));
|
|
29979
|
-
}
|
|
29980
|
-
const declarationName = getNameOfDeclaration(node) || node;
|
|
29981
|
-
forEach(symbol.declarations, (declaration, index) => {
|
|
29982
|
-
const decl = getNameOfDeclaration(declaration) || declaration;
|
|
29983
|
-
const diag3 = createDiagnosticForNode2(decl, message, messageNeedsName ? getDisplayName(declaration) : void 0);
|
|
29984
|
-
file.bindDiagnostics.push(
|
|
29985
|
-
multipleDefaultExports ? addRelatedInfo(diag3, createDiagnosticForNode2(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag3
|
|
29986
|
-
);
|
|
29987
|
-
if (multipleDefaultExports) {
|
|
29988
|
-
relatedInformation.push(createDiagnosticForNode2(decl, Diagnostics.The_first_export_default_is_here));
|
|
29989
|
-
}
|
|
29990
|
-
});
|
|
29991
|
-
const diag2 = createDiagnosticForNode2(declarationName, message, messageNeedsName ? getDisplayName(node) : void 0);
|
|
29992
|
-
file.bindDiagnostics.push(addRelatedInfo(diag2, ...relatedInformation));
|
|
29993
|
-
symbol = createSymbol(0 /* None */, name);
|
|
29994
|
-
}
|
|
29995
|
-
}
|
|
29996
|
-
}
|
|
29997
|
-
addDeclarationToSymbol(symbol, node, includes);
|
|
29998
|
-
if (symbol.parent) {
|
|
29999
|
-
Debug.assert(symbol.parent === parent2, "Existing symbol parent should match new one");
|
|
30000
|
-
} else {
|
|
30001
|
-
symbol.parent = parent2;
|
|
30002
|
-
}
|
|
30003
|
-
return symbol;
|
|
30004
|
-
}
|
|
30005
|
-
function declareModuleMember(node, symbolFlags, symbolExcludes) {
|
|
30006
|
-
const hasExportModifier = !!(getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
|
|
30007
|
-
if (symbolFlags & 2097152 /* Alias */) {
|
|
30008
|
-
if (node.kind === 278 /* ExportSpecifier */ || node.kind === 268 /* ImportEqualsDeclaration */ && hasExportModifier) {
|
|
30009
|
-
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
30010
|
-
} else {
|
|
30011
|
-
Debug.assertNode(container, canHaveLocals);
|
|
30012
|
-
return declareSymbol(
|
|
30013
|
-
container.locals,
|
|
30014
|
-
/*parent*/
|
|
30015
|
-
void 0,
|
|
30016
|
-
node,
|
|
30017
|
-
symbolFlags,
|
|
30018
|
-
symbolExcludes
|
|
30019
|
-
);
|
|
30020
|
-
}
|
|
30021
|
-
} else {
|
|
30022
|
-
if (isJSDocTypeAlias(node))
|
|
30023
|
-
Debug.assert(isInJSFile(node));
|
|
30024
|
-
if (!isAmbientModule(node) && (hasExportModifier || container.flags & 64 /* ExportContext */)) {
|
|
30025
|
-
if (!canHaveLocals(container) || !container.locals || hasSyntacticModifier(node, 1024 /* Default */) && !getDeclarationName(node)) {
|
|
30026
|
-
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
30027
|
-
}
|
|
30028
|
-
const exportKind = symbolFlags & 111551 /* Value */ ? 1048576 /* ExportValue */ : 0;
|
|
30029
|
-
const local = declareSymbol(
|
|
30030
|
-
container.locals,
|
|
30031
|
-
/*parent*/
|
|
30032
|
-
void 0,
|
|
30033
|
-
node,
|
|
30034
|
-
exportKind,
|
|
30035
|
-
symbolExcludes
|
|
30036
|
-
);
|
|
30037
|
-
local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
30038
|
-
node.localSymbol = local;
|
|
30039
|
-
return local;
|
|
30040
|
-
} else {
|
|
30041
|
-
Debug.assertNode(container, canHaveLocals);
|
|
30042
|
-
return declareSymbol(
|
|
30043
|
-
container.locals,
|
|
30044
|
-
/*parent*/
|
|
30045
|
-
void 0,
|
|
30046
|
-
node,
|
|
30047
|
-
symbolFlags,
|
|
30048
|
-
symbolExcludes
|
|
30049
|
-
);
|
|
30050
|
-
}
|
|
30051
|
-
}
|
|
30052
|
-
}
|
|
30053
|
-
function jsdocTreatAsExported(node) {
|
|
30054
|
-
if (node.parent && isModuleDeclaration(node)) {
|
|
30055
|
-
node = node.parent;
|
|
30056
|
-
}
|
|
30057
|
-
if (!isJSDocTypeAlias(node))
|
|
30058
|
-
return false;
|
|
30059
|
-
if (!isJSDocEnumTag(node) && !!node.fullName)
|
|
30060
|
-
return true;
|
|
30061
|
-
const declName = getNameOfDeclaration(node);
|
|
30062
|
-
if (!declName)
|
|
30063
|
-
return false;
|
|
30064
|
-
if (isPropertyAccessEntityNameExpression(declName.parent) && isTopLevelNamespaceAssignment(declName.parent))
|
|
30065
|
-
return true;
|
|
30066
|
-
if (isDeclaration(declName.parent) && getCombinedModifierFlags(declName.parent) & 1 /* Export */)
|
|
30067
|
-
return true;
|
|
30068
|
-
return false;
|
|
30069
|
-
}
|
|
30070
|
-
function bindContainer(node, containerFlags) {
|
|
30071
|
-
const saveContainer = container;
|
|
30072
|
-
const saveThisParentContainer = thisParentContainer;
|
|
30073
|
-
const savedBlockScopeContainer = blockScopeContainer;
|
|
30074
|
-
if (containerFlags & 1 /* IsContainer */) {
|
|
30075
|
-
if (node.kind !== 216 /* ArrowFunction */) {
|
|
30076
|
-
thisParentContainer = container;
|
|
30077
|
-
}
|
|
30078
|
-
container = blockScopeContainer = node;
|
|
30079
|
-
if (containerFlags & 32 /* HasLocals */) {
|
|
30080
|
-
container.locals = createSymbolTable();
|
|
30081
|
-
addToContainerChain(container);
|
|
30082
|
-
}
|
|
30083
|
-
} else if (containerFlags & 2 /* IsBlockScopedContainer */) {
|
|
30084
|
-
blockScopeContainer = node;
|
|
30085
|
-
if (containerFlags & 32 /* HasLocals */) {
|
|
30086
|
-
blockScopeContainer.locals = void 0;
|
|
30087
|
-
}
|
|
30088
|
-
}
|
|
30089
|
-
if (containerFlags & 4 /* IsControlFlowContainer */) {
|
|
30090
|
-
const saveCurrentFlow = currentFlow;
|
|
30091
|
-
const saveBreakTarget = currentBreakTarget;
|
|
30092
|
-
const saveContinueTarget = currentContinueTarget;
|
|
30093
|
-
const saveReturnTarget = currentReturnTarget;
|
|
30094
|
-
const saveExceptionTarget = currentExceptionTarget;
|
|
30095
|
-
const saveActiveLabelList = activeLabelList;
|
|
30096
|
-
const saveHasExplicitReturn = hasExplicitReturn;
|
|
30097
|
-
const isImmediatelyInvoked = containerFlags & 16 /* IsFunctionExpression */ && !hasSyntacticModifier(node, 512 /* Async */) && !node.asteriskToken && !!getImmediatelyInvokedFunctionExpression(node) || node.kind === 172 /* ClassStaticBlockDeclaration */;
|
|
30098
|
-
if (!isImmediatelyInvoked) {
|
|
30099
|
-
currentFlow = initFlowNode({ flags: 2 /* Start */ });
|
|
30100
|
-
if (containerFlags & (16 /* IsFunctionExpression */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */)) {
|
|
30101
|
-
currentFlow.node = node;
|
|
30102
|
-
}
|
|
30103
|
-
}
|
|
30104
|
-
currentReturnTarget = isImmediatelyInvoked || node.kind === 173 /* Constructor */ || isInJSFile(node) && (node.kind === 259 /* FunctionDeclaration */ || node.kind === 215 /* FunctionExpression */) ? createBranchLabel() : void 0;
|
|
30105
|
-
currentExceptionTarget = void 0;
|
|
30106
|
-
currentBreakTarget = void 0;
|
|
30107
|
-
currentContinueTarget = void 0;
|
|
30108
|
-
activeLabelList = void 0;
|
|
30109
|
-
hasExplicitReturn = false;
|
|
30110
|
-
bindChildren(node);
|
|
30111
|
-
node.flags &= ~2816 /* ReachabilityAndEmitFlags */;
|
|
30112
|
-
if (!(currentFlow.flags & 1 /* Unreachable */) && containerFlags & 8 /* IsFunctionLike */ && nodeIsPresent(node.body)) {
|
|
30113
|
-
node.flags |= 256 /* HasImplicitReturn */;
|
|
30114
|
-
if (hasExplicitReturn)
|
|
30115
|
-
node.flags |= 512 /* HasExplicitReturn */;
|
|
30116
|
-
node.endFlowNode = currentFlow;
|
|
30117
|
-
}
|
|
30118
|
-
if (node.kind === 308 /* SourceFile */) {
|
|
30119
|
-
node.flags |= emitFlags;
|
|
30120
|
-
node.endFlowNode = currentFlow;
|
|
30121
|
-
}
|
|
30122
|
-
if (currentReturnTarget) {
|
|
30123
|
-
addAntecedent(currentReturnTarget, currentFlow);
|
|
30124
|
-
currentFlow = finishFlowLabel(currentReturnTarget);
|
|
30125
|
-
if (node.kind === 173 /* Constructor */ || node.kind === 172 /* ClassStaticBlockDeclaration */ || isInJSFile(node) && (node.kind === 259 /* FunctionDeclaration */ || node.kind === 215 /* FunctionExpression */)) {
|
|
30126
|
-
node.returnFlowNode = currentFlow;
|
|
30127
|
-
}
|
|
30128
|
-
}
|
|
30129
|
-
if (!isImmediatelyInvoked) {
|
|
30130
|
-
currentFlow = saveCurrentFlow;
|
|
30131
|
-
}
|
|
30132
|
-
currentBreakTarget = saveBreakTarget;
|
|
30133
|
-
currentContinueTarget = saveContinueTarget;
|
|
30134
|
-
currentReturnTarget = saveReturnTarget;
|
|
30135
|
-
currentExceptionTarget = saveExceptionTarget;
|
|
30136
|
-
activeLabelList = saveActiveLabelList;
|
|
30137
|
-
hasExplicitReturn = saveHasExplicitReturn;
|
|
30138
|
-
} else if (containerFlags & 64 /* IsInterface */) {
|
|
30139
|
-
seenThisKeyword = false;
|
|
30140
|
-
bindChildren(node);
|
|
30141
|
-
Debug.assertNotNode(node, isIdentifier);
|
|
30142
|
-
node.flags = seenThisKeyword ? node.flags | 128 /* ContainsThis */ : node.flags & ~128 /* ContainsThis */;
|
|
30143
|
-
} else {
|
|
30144
|
-
bindChildren(node);
|
|
30145
|
-
}
|
|
30146
|
-
container = saveContainer;
|
|
30147
|
-
thisParentContainer = saveThisParentContainer;
|
|
30148
|
-
blockScopeContainer = savedBlockScopeContainer;
|
|
30149
|
-
}
|
|
30150
|
-
function bindEachFunctionsFirst(nodes) {
|
|
30151
|
-
bindEach(nodes, (n) => n.kind === 259 /* FunctionDeclaration */ ? bind(n) : void 0);
|
|
30152
|
-
bindEach(nodes, (n) => n.kind !== 259 /* FunctionDeclaration */ ? bind(n) : void 0);
|
|
30153
|
-
}
|
|
30154
|
-
function bindEach(nodes, bindFunction = bind) {
|
|
30155
|
-
if (nodes === void 0) {
|
|
30156
|
-
return;
|
|
30157
|
-
}
|
|
30158
|
-
forEach(nodes, bindFunction);
|
|
30159
|
-
}
|
|
30160
|
-
function bindEachChild(node) {
|
|
30161
|
-
forEachChild(node, bind, bindEach);
|
|
30162
|
-
}
|
|
30163
|
-
function bindChildren(node) {
|
|
30164
|
-
const saveInAssignmentPattern = inAssignmentPattern;
|
|
30165
|
-
inAssignmentPattern = false;
|
|
30166
|
-
if (checkUnreachable(node)) {
|
|
30167
|
-
bindEachChild(node);
|
|
30168
|
-
bindJSDoc(node);
|
|
30169
|
-
inAssignmentPattern = saveInAssignmentPattern;
|
|
30170
|
-
return;
|
|
30171
|
-
}
|
|
30172
|
-
if (node.kind >= 240 /* FirstStatement */ && node.kind <= 256 /* LastStatement */ && !options.allowUnreachableCode) {
|
|
30173
|
-
node.flowNode = currentFlow;
|
|
30174
|
-
}
|
|
30175
|
-
switch (node.kind) {
|
|
30176
|
-
case 244 /* WhileStatement */:
|
|
30177
|
-
bindWhileStatement(node);
|
|
30178
|
-
break;
|
|
30179
|
-
case 243 /* DoStatement */:
|
|
30180
|
-
bindDoStatement(node);
|
|
30181
|
-
break;
|
|
30182
|
-
case 245 /* ForStatement */:
|
|
30183
|
-
bindForStatement(node);
|
|
30184
|
-
break;
|
|
30185
|
-
case 246 /* ForInStatement */:
|
|
30186
|
-
case 247 /* ForOfStatement */:
|
|
30187
|
-
bindForInOrForOfStatement(node);
|
|
30188
|
-
break;
|
|
30189
|
-
case 242 /* IfStatement */:
|
|
30190
|
-
bindIfStatement(node);
|
|
30191
|
-
break;
|
|
30192
|
-
case 250 /* ReturnStatement */:
|
|
30193
|
-
case 254 /* ThrowStatement */:
|
|
30194
|
-
bindReturnOrThrow(node);
|
|
30195
|
-
break;
|
|
30196
|
-
case 249 /* BreakStatement */:
|
|
30197
|
-
case 248 /* ContinueStatement */:
|
|
30198
|
-
bindBreakOrContinueStatement(node);
|
|
30199
|
-
break;
|
|
30200
|
-
case 255 /* TryStatement */:
|
|
30201
|
-
bindTryStatement(node);
|
|
30202
|
-
break;
|
|
30203
|
-
case 252 /* SwitchStatement */:
|
|
30204
|
-
bindSwitchStatement(node);
|
|
30205
|
-
break;
|
|
30206
|
-
case 266 /* CaseBlock */:
|
|
30207
|
-
bindCaseBlock(node);
|
|
30208
|
-
break;
|
|
30209
|
-
case 292 /* CaseClause */:
|
|
30210
|
-
bindCaseClause(node);
|
|
30211
|
-
break;
|
|
30212
|
-
case 241 /* ExpressionStatement */:
|
|
30213
|
-
bindExpressionStatement(node);
|
|
30214
|
-
break;
|
|
30215
|
-
case 253 /* LabeledStatement */:
|
|
30216
|
-
bindLabeledStatement(node);
|
|
30217
|
-
break;
|
|
30218
|
-
case 221 /* PrefixUnaryExpression */:
|
|
30219
|
-
bindPrefixUnaryExpressionFlow(node);
|
|
30220
|
-
break;
|
|
30221
|
-
case 222 /* PostfixUnaryExpression */:
|
|
30222
|
-
bindPostfixUnaryExpressionFlow(node);
|
|
30223
|
-
break;
|
|
30224
|
-
case 223 /* BinaryExpression */:
|
|
30225
|
-
if (isDestructuringAssignment(node)) {
|
|
30226
|
-
inAssignmentPattern = saveInAssignmentPattern;
|
|
30227
|
-
bindDestructuringAssignmentFlow(node);
|
|
30228
|
-
return;
|
|
30229
|
-
}
|
|
30230
|
-
bindBinaryExpressionFlow(node);
|
|
30231
|
-
break;
|
|
30232
|
-
case 217 /* DeleteExpression */:
|
|
30233
|
-
bindDeleteExpressionFlow(node);
|
|
30234
|
-
break;
|
|
30235
|
-
case 224 /* ConditionalExpression */:
|
|
30236
|
-
bindConditionalExpressionFlow(node);
|
|
30237
|
-
break;
|
|
30238
|
-
case 257 /* VariableDeclaration */:
|
|
30239
|
-
bindVariableDeclarationFlow(node);
|
|
30240
|
-
break;
|
|
30241
|
-
case 208 /* PropertyAccessExpression */:
|
|
30242
|
-
case 209 /* ElementAccessExpression */:
|
|
30243
|
-
bindAccessExpressionFlow(node);
|
|
30244
|
-
break;
|
|
30245
|
-
case 210 /* CallExpression */:
|
|
30246
|
-
bindCallExpressionFlow(node);
|
|
30247
|
-
break;
|
|
30248
|
-
case 232 /* NonNullExpression */:
|
|
30249
|
-
bindNonNullExpressionFlow(node);
|
|
30250
|
-
break;
|
|
30251
|
-
case 349 /* JSDocTypedefTag */:
|
|
30252
|
-
case 341 /* JSDocCallbackTag */:
|
|
30253
|
-
case 343 /* JSDocEnumTag */:
|
|
30254
|
-
bindJSDocTypeAlias(node);
|
|
30255
|
-
break;
|
|
30256
|
-
case 308 /* SourceFile */: {
|
|
30257
|
-
bindEachFunctionsFirst(node.statements);
|
|
30258
|
-
bind(node.endOfFileToken);
|
|
30259
|
-
break;
|
|
30260
|
-
}
|
|
30261
|
-
case 238 /* Block */:
|
|
30262
|
-
case 265 /* ModuleBlock */:
|
|
30263
|
-
bindEachFunctionsFirst(node.statements);
|
|
30264
|
-
break;
|
|
30265
|
-
case 205 /* BindingElement */:
|
|
30266
|
-
bindBindingElementFlow(node);
|
|
30267
|
-
break;
|
|
30268
|
-
case 166 /* Parameter */:
|
|
30269
|
-
bindParameterFlow(node);
|
|
30270
|
-
break;
|
|
30271
|
-
case 207 /* ObjectLiteralExpression */:
|
|
30272
|
-
case 206 /* ArrayLiteralExpression */:
|
|
30273
|
-
case 299 /* PropertyAssignment */:
|
|
30274
|
-
case 227 /* SpreadElement */:
|
|
30275
|
-
inAssignmentPattern = saveInAssignmentPattern;
|
|
30276
|
-
default:
|
|
30277
|
-
bindEachChild(node);
|
|
30278
|
-
break;
|
|
30279
|
-
}
|
|
30280
|
-
bindJSDoc(node);
|
|
30281
|
-
inAssignmentPattern = saveInAssignmentPattern;
|
|
30282
|
-
}
|
|
30283
|
-
function isNarrowingExpression(expr) {
|
|
30284
|
-
switch (expr.kind) {
|
|
30285
|
-
case 79 /* Identifier */:
|
|
30286
|
-
case 80 /* PrivateIdentifier */:
|
|
30287
|
-
case 108 /* ThisKeyword */:
|
|
30288
|
-
case 208 /* PropertyAccessExpression */:
|
|
30289
|
-
case 209 /* ElementAccessExpression */:
|
|
30290
|
-
return containsNarrowableReference(expr);
|
|
30291
|
-
case 210 /* CallExpression */:
|
|
30292
|
-
return hasNarrowableArgument(expr);
|
|
30293
|
-
case 214 /* ParenthesizedExpression */:
|
|
30294
|
-
case 232 /* NonNullExpression */:
|
|
30295
|
-
return isNarrowingExpression(expr.expression);
|
|
30296
|
-
case 223 /* BinaryExpression */:
|
|
30297
|
-
return isNarrowingBinaryExpression(expr);
|
|
30298
|
-
case 221 /* PrefixUnaryExpression */:
|
|
30299
|
-
return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
|
|
30300
|
-
case 218 /* TypeOfExpression */:
|
|
30301
|
-
return isNarrowingExpression(expr.expression);
|
|
30302
|
-
}
|
|
30303
|
-
return false;
|
|
30304
|
-
}
|
|
30305
|
-
function isNarrowableReference(expr) {
|
|
30306
|
-
return isDottedName(expr) || (isPropertyAccessExpression(expr) || isNonNullExpression(expr) || isParenthesizedExpression(expr)) && isNarrowableReference(expr.expression) || isBinaryExpression(expr) && expr.operatorToken.kind === 27 /* CommaToken */ && isNarrowableReference(expr.right) || isElementAccessExpression(expr) && (isStringOrNumericLiteralLike(expr.argumentExpression) || isEntityNameExpression(expr.argumentExpression)) && isNarrowableReference(expr.expression) || isAssignmentExpression(expr) && isNarrowableReference(expr.left);
|
|
30307
|
-
}
|
|
30308
|
-
function containsNarrowableReference(expr) {
|
|
30309
|
-
return isNarrowableReference(expr) || isOptionalChain(expr) && containsNarrowableReference(expr.expression);
|
|
30310
|
-
}
|
|
30311
|
-
function hasNarrowableArgument(expr) {
|
|
30312
|
-
if (expr.arguments) {
|
|
30313
|
-
for (const argument of expr.arguments) {
|
|
30314
|
-
if (containsNarrowableReference(argument)) {
|
|
30315
|
-
return true;
|
|
30316
|
-
}
|
|
30317
|
-
}
|
|
30318
|
-
}
|
|
30319
|
-
if (expr.expression.kind === 208 /* PropertyAccessExpression */ && containsNarrowableReference(expr.expression.expression)) {
|
|
30320
|
-
return true;
|
|
30321
|
-
}
|
|
30322
|
-
return false;
|
|
30323
|
-
}
|
|
30324
|
-
function isNarrowingTypeofOperands(expr1, expr2) {
|
|
30325
|
-
return isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && isStringLiteralLike(expr2);
|
|
30326
|
-
}
|
|
30327
|
-
function isNarrowingBinaryExpression(expr) {
|
|
30328
|
-
switch (expr.operatorToken.kind) {
|
|
30329
|
-
case 63 /* EqualsToken */:
|
|
30330
|
-
case 75 /* BarBarEqualsToken */:
|
|
30331
|
-
case 76 /* AmpersandAmpersandEqualsToken */:
|
|
30332
|
-
case 77 /* QuestionQuestionEqualsToken */:
|
|
30333
|
-
return containsNarrowableReference(expr.left);
|
|
30334
|
-
case 34 /* EqualsEqualsToken */:
|
|
30335
|
-
case 35 /* ExclamationEqualsToken */:
|
|
30336
|
-
case 36 /* EqualsEqualsEqualsToken */:
|
|
30337
|
-
case 37 /* ExclamationEqualsEqualsToken */:
|
|
30338
|
-
return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) || isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
|
|
30339
|
-
case 102 /* InstanceOfKeyword */:
|
|
30340
|
-
return isNarrowableOperand(expr.left);
|
|
30341
|
-
case 101 /* InKeyword */:
|
|
30342
|
-
return isNarrowingExpression(expr.right);
|
|
30343
|
-
case 27 /* CommaToken */:
|
|
30344
|
-
return isNarrowingExpression(expr.right);
|
|
30345
|
-
}
|
|
30346
|
-
return false;
|
|
30347
|
-
}
|
|
30348
|
-
function isNarrowableOperand(expr) {
|
|
30349
|
-
switch (expr.kind) {
|
|
30350
|
-
case 214 /* ParenthesizedExpression */:
|
|
30351
|
-
return isNarrowableOperand(expr.expression);
|
|
30352
|
-
case 223 /* BinaryExpression */:
|
|
30353
|
-
switch (expr.operatorToken.kind) {
|
|
30354
|
-
case 63 /* EqualsToken */:
|
|
30355
|
-
return isNarrowableOperand(expr.left);
|
|
30356
|
-
case 27 /* CommaToken */:
|
|
30357
|
-
return isNarrowableOperand(expr.right);
|
|
30358
|
-
}
|
|
30359
|
-
}
|
|
30360
|
-
return containsNarrowableReference(expr);
|
|
30361
|
-
}
|
|
30362
|
-
function createBranchLabel() {
|
|
30363
|
-
return initFlowNode({ flags: 4 /* BranchLabel */, antecedents: void 0 });
|
|
30364
|
-
}
|
|
30365
|
-
function createLoopLabel() {
|
|
30366
|
-
return initFlowNode({ flags: 8 /* LoopLabel */, antecedents: void 0 });
|
|
30367
|
-
}
|
|
30368
|
-
function createReduceLabel(target, antecedents, antecedent) {
|
|
30369
|
-
return initFlowNode({ flags: 1024 /* ReduceLabel */, target, antecedents, antecedent });
|
|
30370
|
-
}
|
|
30371
|
-
function setFlowNodeReferenced(flow) {
|
|
30372
|
-
flow.flags |= flow.flags & 2048 /* Referenced */ ? 4096 /* Shared */ : 2048 /* Referenced */;
|
|
30373
|
-
}
|
|
30374
|
-
function addAntecedent(label, antecedent) {
|
|
30375
|
-
if (!(antecedent.flags & 1 /* Unreachable */) && !contains(label.antecedents, antecedent)) {
|
|
30376
|
-
(label.antecedents || (label.antecedents = [])).push(antecedent);
|
|
30377
|
-
setFlowNodeReferenced(antecedent);
|
|
30378
|
-
}
|
|
30379
|
-
}
|
|
30380
|
-
function createFlowCondition(flags, antecedent, expression) {
|
|
30381
|
-
if (antecedent.flags & 1 /* Unreachable */) {
|
|
30382
|
-
return antecedent;
|
|
30383
|
-
}
|
|
30384
|
-
if (!expression) {
|
|
30385
|
-
return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
|
|
30386
|
-
}
|
|
30387
|
-
if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) && !isExpressionOfOptionalChainRoot(expression) && !isNullishCoalesce(expression.parent)) {
|
|
30388
|
-
return unreachableFlow;
|
|
30389
|
-
}
|
|
30390
|
-
if (!isNarrowingExpression(expression)) {
|
|
30391
|
-
return antecedent;
|
|
30392
|
-
}
|
|
30393
|
-
setFlowNodeReferenced(antecedent);
|
|
30394
|
-
return initFlowNode({ flags, antecedent, node: expression });
|
|
30395
|
-
}
|
|
30396
|
-
function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) {
|
|
30397
|
-
setFlowNodeReferenced(antecedent);
|
|
30398
|
-
return initFlowNode({ flags: 128 /* SwitchClause */, antecedent, switchStatement, clauseStart, clauseEnd });
|
|
30399
|
-
}
|
|
30400
|
-
function createFlowMutation(flags, antecedent, node) {
|
|
30401
|
-
setFlowNodeReferenced(antecedent);
|
|
30402
|
-
const result = initFlowNode({ flags, antecedent, node });
|
|
30403
|
-
if (currentExceptionTarget) {
|
|
30404
|
-
addAntecedent(currentExceptionTarget, result);
|
|
30405
|
-
}
|
|
30406
|
-
return result;
|
|
30407
|
-
}
|
|
30408
|
-
function createFlowCall(antecedent, node) {
|
|
30409
|
-
setFlowNodeReferenced(antecedent);
|
|
30410
|
-
return initFlowNode({ flags: 512 /* Call */, antecedent, node });
|
|
30411
|
-
}
|
|
30412
|
-
function finishFlowLabel(flow) {
|
|
30413
|
-
const antecedents = flow.antecedents;
|
|
30414
|
-
if (!antecedents) {
|
|
30415
|
-
return unreachableFlow;
|
|
30416
|
-
}
|
|
30417
|
-
if (antecedents.length === 1) {
|
|
30418
|
-
return antecedents[0];
|
|
30419
|
-
}
|
|
30420
|
-
return flow;
|
|
30421
|
-
}
|
|
30422
|
-
function isStatementCondition(node) {
|
|
30423
|
-
const parent2 = node.parent;
|
|
30424
|
-
switch (parent2.kind) {
|
|
30425
|
-
case 242 /* IfStatement */:
|
|
30426
|
-
case 244 /* WhileStatement */:
|
|
30427
|
-
case 243 /* DoStatement */:
|
|
30428
|
-
return parent2.expression === node;
|
|
30429
|
-
case 245 /* ForStatement */:
|
|
30430
|
-
case 224 /* ConditionalExpression */:
|
|
30431
|
-
return parent2.condition === node;
|
|
30432
|
-
}
|
|
30433
|
-
return false;
|
|
30434
|
-
}
|
|
30435
|
-
function isLogicalExpression(node) {
|
|
30436
|
-
while (true) {
|
|
30437
|
-
if (node.kind === 214 /* ParenthesizedExpression */) {
|
|
30438
|
-
node = node.expression;
|
|
30439
|
-
} else if (node.kind === 221 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
|
|
30440
|
-
node = node.operand;
|
|
30441
|
-
} else {
|
|
30442
|
-
return isLogicalOrCoalescingBinaryExpression(node);
|
|
30443
|
-
}
|
|
30444
|
-
}
|
|
30445
|
-
}
|
|
30446
|
-
function isLogicalAssignmentExpression(node) {
|
|
30447
|
-
return isLogicalOrCoalescingAssignmentExpression(skipParentheses(node));
|
|
30448
|
-
}
|
|
30449
|
-
function isTopLevelLogicalExpression(node) {
|
|
30450
|
-
while (isParenthesizedExpression(node.parent) || isPrefixUnaryExpression(node.parent) && node.parent.operator === 53 /* ExclamationToken */) {
|
|
30451
|
-
node = node.parent;
|
|
30452
|
-
}
|
|
30453
|
-
return !isStatementCondition(node) && !isLogicalExpression(node.parent) && !(isOptionalChain(node.parent) && node.parent.expression === node);
|
|
30454
|
-
}
|
|
30455
|
-
function doWithConditionalBranches(action, value, trueTarget, falseTarget) {
|
|
30456
|
-
const savedTrueTarget = currentTrueTarget;
|
|
30457
|
-
const savedFalseTarget = currentFalseTarget;
|
|
30458
|
-
currentTrueTarget = trueTarget;
|
|
30459
|
-
currentFalseTarget = falseTarget;
|
|
30460
|
-
action(value);
|
|
30461
|
-
currentTrueTarget = savedTrueTarget;
|
|
30462
|
-
currentFalseTarget = savedFalseTarget;
|
|
30463
|
-
}
|
|
30464
|
-
function bindCondition(node, trueTarget, falseTarget) {
|
|
30465
|
-
doWithConditionalBranches(bind, node, trueTarget, falseTarget);
|
|
30466
|
-
if (!node || !isLogicalAssignmentExpression(node) && !isLogicalExpression(node) && !(isOptionalChain(node) && isOutermostOptionalChain(node))) {
|
|
30467
|
-
addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
|
|
30468
|
-
addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
|
|
30469
|
-
}
|
|
30470
|
-
}
|
|
30471
|
-
function bindIterativeStatement(node, breakTarget, continueTarget) {
|
|
30472
|
-
const saveBreakTarget = currentBreakTarget;
|
|
30473
|
-
const saveContinueTarget = currentContinueTarget;
|
|
30474
|
-
currentBreakTarget = breakTarget;
|
|
30475
|
-
currentContinueTarget = continueTarget;
|
|
30476
|
-
bind(node);
|
|
30477
|
-
currentBreakTarget = saveBreakTarget;
|
|
30478
|
-
currentContinueTarget = saveContinueTarget;
|
|
30479
|
-
}
|
|
30480
|
-
function setContinueTarget(node, target) {
|
|
30481
|
-
let label = activeLabelList;
|
|
30482
|
-
while (label && node.parent.kind === 253 /* LabeledStatement */) {
|
|
30483
|
-
label.continueTarget = target;
|
|
30484
|
-
label = label.next;
|
|
30485
|
-
node = node.parent;
|
|
30486
|
-
}
|
|
30487
|
-
return target;
|
|
30488
|
-
}
|
|
30489
|
-
function bindWhileStatement(node) {
|
|
30490
|
-
const preWhileLabel = setContinueTarget(node, createLoopLabel());
|
|
30491
|
-
const preBodyLabel = createBranchLabel();
|
|
30492
|
-
const postWhileLabel = createBranchLabel();
|
|
30493
|
-
addAntecedent(preWhileLabel, currentFlow);
|
|
30494
|
-
currentFlow = preWhileLabel;
|
|
30495
|
-
bindCondition(node.expression, preBodyLabel, postWhileLabel);
|
|
30496
|
-
currentFlow = finishFlowLabel(preBodyLabel);
|
|
30497
|
-
bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel);
|
|
30498
|
-
addAntecedent(preWhileLabel, currentFlow);
|
|
30499
|
-
currentFlow = finishFlowLabel(postWhileLabel);
|
|
30500
|
-
}
|
|
30501
|
-
function bindDoStatement(node) {
|
|
30502
|
-
const preDoLabel = createLoopLabel();
|
|
30503
|
-
const preConditionLabel = setContinueTarget(node, createBranchLabel());
|
|
30504
|
-
const postDoLabel = createBranchLabel();
|
|
30505
|
-
addAntecedent(preDoLabel, currentFlow);
|
|
30506
|
-
currentFlow = preDoLabel;
|
|
30507
|
-
bindIterativeStatement(node.statement, postDoLabel, preConditionLabel);
|
|
30508
|
-
addAntecedent(preConditionLabel, currentFlow);
|
|
30509
|
-
currentFlow = finishFlowLabel(preConditionLabel);
|
|
30510
|
-
bindCondition(node.expression, preDoLabel, postDoLabel);
|
|
30511
|
-
currentFlow = finishFlowLabel(postDoLabel);
|
|
30512
|
-
}
|
|
30513
|
-
function bindForStatement(node) {
|
|
30514
|
-
const preLoopLabel = setContinueTarget(node, createLoopLabel());
|
|
30515
|
-
const preBodyLabel = createBranchLabel();
|
|
30516
|
-
const postLoopLabel = createBranchLabel();
|
|
30517
|
-
bind(node.initializer);
|
|
30518
|
-
addAntecedent(preLoopLabel, currentFlow);
|
|
30519
|
-
currentFlow = preLoopLabel;
|
|
30520
|
-
bindCondition(node.condition, preBodyLabel, postLoopLabel);
|
|
30521
|
-
currentFlow = finishFlowLabel(preBodyLabel);
|
|
30522
|
-
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
|
|
30523
|
-
bind(node.incrementor);
|
|
30524
|
-
addAntecedent(preLoopLabel, currentFlow);
|
|
30525
|
-
currentFlow = finishFlowLabel(postLoopLabel);
|
|
30526
|
-
}
|
|
30527
|
-
function bindForInOrForOfStatement(node) {
|
|
30528
|
-
const preLoopLabel = setContinueTarget(node, createLoopLabel());
|
|
30529
|
-
const postLoopLabel = createBranchLabel();
|
|
30530
|
-
bind(node.expression);
|
|
30531
|
-
addAntecedent(preLoopLabel, currentFlow);
|
|
30532
|
-
currentFlow = preLoopLabel;
|
|
30533
|
-
if (node.kind === 247 /* ForOfStatement */) {
|
|
30534
|
-
bind(node.awaitModifier);
|
|
30535
|
-
}
|
|
30536
|
-
addAntecedent(postLoopLabel, currentFlow);
|
|
30537
|
-
bind(node.initializer);
|
|
30538
|
-
if (node.initializer.kind !== 258 /* VariableDeclarationList */) {
|
|
30539
|
-
bindAssignmentTargetFlow(node.initializer);
|
|
30540
|
-
}
|
|
30541
|
-
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
|
|
30542
|
-
addAntecedent(preLoopLabel, currentFlow);
|
|
30543
|
-
currentFlow = finishFlowLabel(postLoopLabel);
|
|
30544
|
-
}
|
|
30545
|
-
function bindIfStatement(node) {
|
|
30546
|
-
const thenLabel = createBranchLabel();
|
|
30547
|
-
const elseLabel = createBranchLabel();
|
|
30548
|
-
const postIfLabel = createBranchLabel();
|
|
30549
|
-
bindCondition(node.expression, thenLabel, elseLabel);
|
|
30550
|
-
currentFlow = finishFlowLabel(thenLabel);
|
|
30551
|
-
bind(node.thenStatement);
|
|
30552
|
-
addAntecedent(postIfLabel, currentFlow);
|
|
30553
|
-
currentFlow = finishFlowLabel(elseLabel);
|
|
30554
|
-
bind(node.elseStatement);
|
|
30555
|
-
addAntecedent(postIfLabel, currentFlow);
|
|
30556
|
-
currentFlow = finishFlowLabel(postIfLabel);
|
|
30557
|
-
}
|
|
30558
|
-
function bindReturnOrThrow(node) {
|
|
30559
|
-
bind(node.expression);
|
|
30560
|
-
if (node.kind === 250 /* ReturnStatement */) {
|
|
30561
|
-
hasExplicitReturn = true;
|
|
30562
|
-
if (currentReturnTarget) {
|
|
30563
|
-
addAntecedent(currentReturnTarget, currentFlow);
|
|
30564
|
-
}
|
|
30565
|
-
}
|
|
30566
|
-
currentFlow = unreachableFlow;
|
|
30567
|
-
}
|
|
30568
|
-
function findActiveLabel(name) {
|
|
30569
|
-
for (let label = activeLabelList; label; label = label.next) {
|
|
30570
|
-
if (label.name === name) {
|
|
30571
|
-
return label;
|
|
30572
|
-
}
|
|
30573
|
-
}
|
|
30574
|
-
return void 0;
|
|
30575
|
-
}
|
|
30576
|
-
function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
|
|
30577
|
-
const flowLabel = node.kind === 249 /* BreakStatement */ ? breakTarget : continueTarget;
|
|
30578
|
-
if (flowLabel) {
|
|
30579
|
-
addAntecedent(flowLabel, currentFlow);
|
|
30580
|
-
currentFlow = unreachableFlow;
|
|
30581
|
-
}
|
|
30582
|
-
}
|
|
30583
|
-
function bindBreakOrContinueStatement(node) {
|
|
30584
|
-
bind(node.label);
|
|
30585
|
-
if (node.label) {
|
|
30586
|
-
const activeLabel = findActiveLabel(node.label.escapedText);
|
|
30587
|
-
if (activeLabel) {
|
|
30588
|
-
activeLabel.referenced = true;
|
|
30589
|
-
bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget);
|
|
30590
|
-
}
|
|
30591
|
-
} else {
|
|
30592
|
-
bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget);
|
|
30593
|
-
}
|
|
30594
|
-
}
|
|
30595
|
-
function bindTryStatement(node) {
|
|
30596
|
-
const saveReturnTarget = currentReturnTarget;
|
|
30597
|
-
const saveExceptionTarget = currentExceptionTarget;
|
|
30598
|
-
const normalExitLabel = createBranchLabel();
|
|
30599
|
-
const returnLabel = createBranchLabel();
|
|
30600
|
-
let exceptionLabel = createBranchLabel();
|
|
30601
|
-
if (node.finallyBlock) {
|
|
30602
|
-
currentReturnTarget = returnLabel;
|
|
30603
|
-
}
|
|
30604
|
-
addAntecedent(exceptionLabel, currentFlow);
|
|
30605
|
-
currentExceptionTarget = exceptionLabel;
|
|
30606
|
-
bind(node.tryBlock);
|
|
30607
|
-
addAntecedent(normalExitLabel, currentFlow);
|
|
30608
|
-
if (node.catchClause) {
|
|
30609
|
-
currentFlow = finishFlowLabel(exceptionLabel);
|
|
30610
|
-
exceptionLabel = createBranchLabel();
|
|
30611
|
-
addAntecedent(exceptionLabel, currentFlow);
|
|
30612
|
-
currentExceptionTarget = exceptionLabel;
|
|
30613
|
-
bind(node.catchClause);
|
|
30614
|
-
addAntecedent(normalExitLabel, currentFlow);
|
|
30615
|
-
}
|
|
30616
|
-
currentReturnTarget = saveReturnTarget;
|
|
30617
|
-
currentExceptionTarget = saveExceptionTarget;
|
|
30618
|
-
if (node.finallyBlock) {
|
|
30619
|
-
const finallyLabel = createBranchLabel();
|
|
30620
|
-
finallyLabel.antecedents = concatenate(concatenate(normalExitLabel.antecedents, exceptionLabel.antecedents), returnLabel.antecedents);
|
|
30621
|
-
currentFlow = finallyLabel;
|
|
30622
|
-
bind(node.finallyBlock);
|
|
30623
|
-
if (currentFlow.flags & 1 /* Unreachable */) {
|
|
30624
|
-
currentFlow = unreachableFlow;
|
|
30625
|
-
} else {
|
|
30626
|
-
if (currentReturnTarget && returnLabel.antecedents) {
|
|
30627
|
-
addAntecedent(currentReturnTarget, createReduceLabel(finallyLabel, returnLabel.antecedents, currentFlow));
|
|
30628
|
-
}
|
|
30629
|
-
if (currentExceptionTarget && exceptionLabel.antecedents) {
|
|
30630
|
-
addAntecedent(currentExceptionTarget, createReduceLabel(finallyLabel, exceptionLabel.antecedents, currentFlow));
|
|
30631
|
-
}
|
|
30632
|
-
currentFlow = normalExitLabel.antecedents ? createReduceLabel(finallyLabel, normalExitLabel.antecedents, currentFlow) : unreachableFlow;
|
|
30633
|
-
}
|
|
30634
|
-
} else {
|
|
30635
|
-
currentFlow = finishFlowLabel(normalExitLabel);
|
|
30636
|
-
}
|
|
30637
|
-
}
|
|
30638
|
-
function bindSwitchStatement(node) {
|
|
30639
|
-
const postSwitchLabel = createBranchLabel();
|
|
30640
|
-
bind(node.expression);
|
|
30641
|
-
const saveBreakTarget = currentBreakTarget;
|
|
30642
|
-
const savePreSwitchCaseFlow = preSwitchCaseFlow;
|
|
30643
|
-
currentBreakTarget = postSwitchLabel;
|
|
30644
|
-
preSwitchCaseFlow = currentFlow;
|
|
30645
|
-
bind(node.caseBlock);
|
|
30646
|
-
addAntecedent(postSwitchLabel, currentFlow);
|
|
30647
|
-
const hasDefault = forEach(node.caseBlock.clauses, (c) => c.kind === 293 /* DefaultClause */);
|
|
30648
|
-
node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents;
|
|
30649
|
-
if (!hasDefault) {
|
|
30650
|
-
addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0));
|
|
30651
|
-
}
|
|
30652
|
-
currentBreakTarget = saveBreakTarget;
|
|
30653
|
-
preSwitchCaseFlow = savePreSwitchCaseFlow;
|
|
30654
|
-
currentFlow = finishFlowLabel(postSwitchLabel);
|
|
30655
|
-
}
|
|
30656
|
-
function bindCaseBlock(node) {
|
|
30657
|
-
const clauses = node.clauses;
|
|
30658
|
-
const isNarrowingSwitch = isNarrowingExpression(node.parent.expression);
|
|
30659
|
-
let fallthroughFlow = unreachableFlow;
|
|
30660
|
-
for (let i = 0; i < clauses.length; i++) {
|
|
30661
|
-
const clauseStart = i;
|
|
30662
|
-
while (!clauses[i].statements.length && i + 1 < clauses.length) {
|
|
30663
|
-
bind(clauses[i]);
|
|
30664
|
-
i++;
|
|
30665
|
-
}
|
|
30666
|
-
const preCaseLabel = createBranchLabel();
|
|
30667
|
-
addAntecedent(preCaseLabel, isNarrowingSwitch ? createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1) : preSwitchCaseFlow);
|
|
30668
|
-
addAntecedent(preCaseLabel, fallthroughFlow);
|
|
30669
|
-
currentFlow = finishFlowLabel(preCaseLabel);
|
|
30670
|
-
const clause = clauses[i];
|
|
30671
|
-
bind(clause);
|
|
30672
|
-
fallthroughFlow = currentFlow;
|
|
30673
|
-
if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) {
|
|
30674
|
-
clause.fallthroughFlowNode = currentFlow;
|
|
30675
|
-
}
|
|
30676
|
-
}
|
|
30677
|
-
}
|
|
30678
|
-
function bindCaseClause(node) {
|
|
30679
|
-
const saveCurrentFlow = currentFlow;
|
|
30680
|
-
currentFlow = preSwitchCaseFlow;
|
|
30681
|
-
bind(node.expression);
|
|
30682
|
-
currentFlow = saveCurrentFlow;
|
|
30683
|
-
bindEach(node.statements);
|
|
30684
|
-
}
|
|
30685
|
-
function bindExpressionStatement(node) {
|
|
30686
|
-
bind(node.expression);
|
|
30687
|
-
maybeBindExpressionFlowIfCall(node.expression);
|
|
30688
|
-
}
|
|
30689
|
-
function maybeBindExpressionFlowIfCall(node) {
|
|
30690
|
-
if (node.kind === 210 /* CallExpression */) {
|
|
30691
|
-
const call = node;
|
|
30692
|
-
if (call.expression.kind !== 106 /* SuperKeyword */ && isDottedName(call.expression)) {
|
|
30693
|
-
currentFlow = createFlowCall(currentFlow, call);
|
|
30694
|
-
}
|
|
30695
|
-
}
|
|
30696
|
-
}
|
|
30697
|
-
function bindLabeledStatement(node) {
|
|
30698
|
-
const postStatementLabel = createBranchLabel();
|
|
30699
|
-
activeLabelList = {
|
|
30700
|
-
next: activeLabelList,
|
|
30701
|
-
name: node.label.escapedText,
|
|
30702
|
-
breakTarget: postStatementLabel,
|
|
30703
|
-
continueTarget: void 0,
|
|
30704
|
-
referenced: false
|
|
30705
|
-
};
|
|
30706
|
-
bind(node.label);
|
|
30707
|
-
bind(node.statement);
|
|
30708
|
-
if (!activeLabelList.referenced && !options.allowUnusedLabels) {
|
|
30709
|
-
errorOrSuggestionOnNode(unusedLabelIsError(options), node.label, Diagnostics.Unused_label);
|
|
30710
|
-
}
|
|
30711
|
-
activeLabelList = activeLabelList.next;
|
|
30712
|
-
addAntecedent(postStatementLabel, currentFlow);
|
|
30713
|
-
currentFlow = finishFlowLabel(postStatementLabel);
|
|
30714
|
-
}
|
|
30715
|
-
function bindDestructuringTargetFlow(node) {
|
|
30716
|
-
if (node.kind === 223 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
|
|
30717
|
-
bindAssignmentTargetFlow(node.left);
|
|
30718
|
-
} else {
|
|
30719
|
-
bindAssignmentTargetFlow(node);
|
|
30720
|
-
}
|
|
30721
|
-
}
|
|
30722
|
-
function bindAssignmentTargetFlow(node) {
|
|
30723
|
-
if (isNarrowableReference(node)) {
|
|
30724
|
-
currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
|
|
30725
|
-
} else if (node.kind === 206 /* ArrayLiteralExpression */) {
|
|
30726
|
-
for (const e of node.elements) {
|
|
30727
|
-
if (e.kind === 227 /* SpreadElement */) {
|
|
30728
|
-
bindAssignmentTargetFlow(e.expression);
|
|
30729
|
-
} else {
|
|
30730
|
-
bindDestructuringTargetFlow(e);
|
|
30731
|
-
}
|
|
30732
|
-
}
|
|
30733
|
-
} else if (node.kind === 207 /* ObjectLiteralExpression */) {
|
|
30734
|
-
for (const p of node.properties) {
|
|
30735
|
-
if (p.kind === 299 /* PropertyAssignment */) {
|
|
30736
|
-
bindDestructuringTargetFlow(p.initializer);
|
|
30737
|
-
} else if (p.kind === 300 /* ShorthandPropertyAssignment */) {
|
|
30738
|
-
bindAssignmentTargetFlow(p.name);
|
|
30739
|
-
} else if (p.kind === 301 /* SpreadAssignment */) {
|
|
30740
|
-
bindAssignmentTargetFlow(p.expression);
|
|
30741
|
-
}
|
|
30742
|
-
}
|
|
30743
|
-
}
|
|
30744
|
-
}
|
|
30745
|
-
function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
|
|
30746
|
-
const preRightLabel = createBranchLabel();
|
|
30747
|
-
if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
|
|
30748
|
-
bindCondition(node.left, preRightLabel, falseTarget);
|
|
30749
|
-
} else {
|
|
30750
|
-
bindCondition(node.left, trueTarget, preRightLabel);
|
|
30751
|
-
}
|
|
30752
|
-
currentFlow = finishFlowLabel(preRightLabel);
|
|
30753
|
-
bind(node.operatorToken);
|
|
30754
|
-
if (isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind)) {
|
|
30755
|
-
doWithConditionalBranches(bind, node.right, trueTarget, falseTarget);
|
|
30756
|
-
bindAssignmentTargetFlow(node.left);
|
|
30757
|
-
addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
|
|
30758
|
-
addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
|
|
30759
|
-
} else {
|
|
30760
|
-
bindCondition(node.right, trueTarget, falseTarget);
|
|
30761
|
-
}
|
|
30762
|
-
}
|
|
30763
|
-
function bindPrefixUnaryExpressionFlow(node) {
|
|
30764
|
-
if (node.operator === 53 /* ExclamationToken */) {
|
|
30765
|
-
const saveTrueTarget = currentTrueTarget;
|
|
30766
|
-
currentTrueTarget = currentFalseTarget;
|
|
30767
|
-
currentFalseTarget = saveTrueTarget;
|
|
30768
|
-
bindEachChild(node);
|
|
30769
|
-
currentFalseTarget = currentTrueTarget;
|
|
30770
|
-
currentTrueTarget = saveTrueTarget;
|
|
30771
|
-
} else {
|
|
30772
|
-
bindEachChild(node);
|
|
30773
|
-
if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
|
|
30774
|
-
bindAssignmentTargetFlow(node.operand);
|
|
30775
|
-
}
|
|
30776
|
-
}
|
|
30777
|
-
}
|
|
30778
|
-
function bindPostfixUnaryExpressionFlow(node) {
|
|
30779
|
-
bindEachChild(node);
|
|
30780
|
-
if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
|
|
30781
|
-
bindAssignmentTargetFlow(node.operand);
|
|
30782
|
-
}
|
|
30783
|
-
}
|
|
30784
|
-
function bindDestructuringAssignmentFlow(node) {
|
|
30785
|
-
if (inAssignmentPattern) {
|
|
30786
|
-
inAssignmentPattern = false;
|
|
30787
|
-
bind(node.operatorToken);
|
|
30788
|
-
bind(node.right);
|
|
30789
|
-
inAssignmentPattern = true;
|
|
30790
|
-
bind(node.left);
|
|
30791
|
-
} else {
|
|
30792
|
-
inAssignmentPattern = true;
|
|
30793
|
-
bind(node.left);
|
|
30794
|
-
inAssignmentPattern = false;
|
|
30795
|
-
bind(node.operatorToken);
|
|
30796
|
-
bind(node.right);
|
|
30797
|
-
}
|
|
30798
|
-
bindAssignmentTargetFlow(node.left);
|
|
30799
|
-
}
|
|
30800
|
-
function createBindBinaryExpressionFlow() {
|
|
30801
|
-
return createBinaryExpressionTrampoline(
|
|
30802
|
-
onEnter,
|
|
30803
|
-
onLeft,
|
|
30804
|
-
onOperator,
|
|
30805
|
-
onRight,
|
|
30806
|
-
onExit,
|
|
30807
|
-
/*foldState*/
|
|
30808
|
-
void 0
|
|
30809
|
-
);
|
|
30810
|
-
function onEnter(node, state) {
|
|
30811
|
-
if (state) {
|
|
30812
|
-
state.stackIndex++;
|
|
30813
|
-
setParent(node, parent);
|
|
30814
|
-
const saveInStrictMode = inStrictMode;
|
|
30815
|
-
bindWorker(node);
|
|
30816
|
-
const saveParent = parent;
|
|
30817
|
-
parent = node;
|
|
30818
|
-
state.skip = false;
|
|
30819
|
-
state.inStrictModeStack[state.stackIndex] = saveInStrictMode;
|
|
30820
|
-
state.parentStack[state.stackIndex] = saveParent;
|
|
30821
|
-
} else {
|
|
30822
|
-
state = {
|
|
30823
|
-
stackIndex: 0,
|
|
30824
|
-
skip: false,
|
|
30825
|
-
inStrictModeStack: [void 0],
|
|
30826
|
-
parentStack: [void 0]
|
|
30827
|
-
};
|
|
30828
|
-
}
|
|
30829
|
-
const operator = node.operatorToken.kind;
|
|
30830
|
-
if (isLogicalOrCoalescingBinaryOperator(operator) || isLogicalOrCoalescingAssignmentOperator(operator)) {
|
|
30831
|
-
if (isTopLevelLogicalExpression(node)) {
|
|
30832
|
-
const postExpressionLabel = createBranchLabel();
|
|
30833
|
-
bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel);
|
|
30834
|
-
currentFlow = finishFlowLabel(postExpressionLabel);
|
|
30835
|
-
} else {
|
|
30836
|
-
bindLogicalLikeExpression(node, currentTrueTarget, currentFalseTarget);
|
|
30837
|
-
}
|
|
30838
|
-
state.skip = true;
|
|
30839
|
-
}
|
|
30840
|
-
return state;
|
|
30841
|
-
}
|
|
30842
|
-
function onLeft(left, state, node) {
|
|
30843
|
-
if (!state.skip) {
|
|
30844
|
-
const maybeBound = maybeBind2(left);
|
|
30845
|
-
if (node.operatorToken.kind === 27 /* CommaToken */) {
|
|
30846
|
-
maybeBindExpressionFlowIfCall(left);
|
|
30847
|
-
}
|
|
30848
|
-
return maybeBound;
|
|
30849
|
-
}
|
|
30850
|
-
}
|
|
30851
|
-
function onOperator(operatorToken, state, _node) {
|
|
30852
|
-
if (!state.skip) {
|
|
30853
|
-
bind(operatorToken);
|
|
30854
|
-
}
|
|
30855
|
-
}
|
|
30856
|
-
function onRight(right, state, node) {
|
|
30857
|
-
if (!state.skip) {
|
|
30858
|
-
const maybeBound = maybeBind2(right);
|
|
30859
|
-
if (node.operatorToken.kind === 27 /* CommaToken */) {
|
|
30860
|
-
maybeBindExpressionFlowIfCall(right);
|
|
30861
|
-
}
|
|
30862
|
-
return maybeBound;
|
|
30863
|
-
}
|
|
30864
|
-
}
|
|
30865
|
-
function onExit(node, state) {
|
|
30866
|
-
if (!state.skip) {
|
|
30867
|
-
const operator = node.operatorToken.kind;
|
|
30868
|
-
if (isAssignmentOperator(operator) && !isAssignmentTarget(node)) {
|
|
30869
|
-
bindAssignmentTargetFlow(node.left);
|
|
30870
|
-
if (operator === 63 /* EqualsToken */ && node.left.kind === 209 /* ElementAccessExpression */) {
|
|
30871
|
-
const elementAccess = node.left;
|
|
30872
|
-
if (isNarrowableOperand(elementAccess.expression)) {
|
|
30873
|
-
currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
|
|
30874
|
-
}
|
|
30875
|
-
}
|
|
30876
|
-
}
|
|
30877
|
-
}
|
|
30878
|
-
const savedInStrictMode = state.inStrictModeStack[state.stackIndex];
|
|
30879
|
-
const savedParent = state.parentStack[state.stackIndex];
|
|
30880
|
-
if (savedInStrictMode !== void 0) {
|
|
30881
|
-
inStrictMode = savedInStrictMode;
|
|
30882
|
-
}
|
|
30883
|
-
if (savedParent !== void 0) {
|
|
30884
|
-
parent = savedParent;
|
|
30885
|
-
}
|
|
30886
|
-
state.skip = false;
|
|
30887
|
-
state.stackIndex--;
|
|
30888
|
-
}
|
|
30889
|
-
function maybeBind2(node) {
|
|
30890
|
-
if (node && isBinaryExpression(node) && !isDestructuringAssignment(node)) {
|
|
30891
|
-
return node;
|
|
30892
|
-
}
|
|
30893
|
-
bind(node);
|
|
30894
|
-
}
|
|
30895
|
-
}
|
|
30896
|
-
function bindDeleteExpressionFlow(node) {
|
|
30897
|
-
bindEachChild(node);
|
|
30898
|
-
if (node.expression.kind === 208 /* PropertyAccessExpression */) {
|
|
30899
|
-
bindAssignmentTargetFlow(node.expression);
|
|
30900
|
-
}
|
|
30901
|
-
}
|
|
30902
|
-
function bindConditionalExpressionFlow(node) {
|
|
30903
|
-
const trueLabel = createBranchLabel();
|
|
30904
|
-
const falseLabel = createBranchLabel();
|
|
30905
|
-
const postExpressionLabel = createBranchLabel();
|
|
30906
|
-
bindCondition(node.condition, trueLabel, falseLabel);
|
|
30907
|
-
currentFlow = finishFlowLabel(trueLabel);
|
|
30908
|
-
bind(node.questionToken);
|
|
30909
|
-
bind(node.whenTrue);
|
|
30910
|
-
addAntecedent(postExpressionLabel, currentFlow);
|
|
30911
|
-
currentFlow = finishFlowLabel(falseLabel);
|
|
30912
|
-
bind(node.colonToken);
|
|
30913
|
-
bind(node.whenFalse);
|
|
30914
|
-
addAntecedent(postExpressionLabel, currentFlow);
|
|
30915
|
-
currentFlow = finishFlowLabel(postExpressionLabel);
|
|
30916
|
-
}
|
|
30917
|
-
function bindInitializedVariableFlow(node) {
|
|
30918
|
-
const name = !isOmittedExpression(node) ? node.name : void 0;
|
|
30919
|
-
if (isBindingPattern(name)) {
|
|
30920
|
-
for (const child of name.elements) {
|
|
30921
|
-
bindInitializedVariableFlow(child);
|
|
30922
|
-
}
|
|
30923
|
-
} else {
|
|
30924
|
-
currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
|
|
30925
|
-
}
|
|
30926
|
-
}
|
|
30927
|
-
function bindVariableDeclarationFlow(node) {
|
|
30928
|
-
bindEachChild(node);
|
|
30929
|
-
if (node.initializer || isForInOrOfStatement(node.parent.parent)) {
|
|
30930
|
-
bindInitializedVariableFlow(node);
|
|
30931
|
-
}
|
|
30932
|
-
}
|
|
30933
|
-
function bindBindingElementFlow(node) {
|
|
30934
|
-
bind(node.dotDotDotToken);
|
|
30935
|
-
bind(node.propertyName);
|
|
30936
|
-
bindInitializer(node.initializer);
|
|
30937
|
-
bind(node.name);
|
|
30938
|
-
}
|
|
30939
|
-
function bindParameterFlow(node) {
|
|
30940
|
-
bindEach(node.modifiers);
|
|
30941
|
-
bind(node.dotDotDotToken);
|
|
30942
|
-
bind(node.questionToken);
|
|
30943
|
-
bind(node.type);
|
|
30944
|
-
bindInitializer(node.initializer);
|
|
30945
|
-
bind(node.name);
|
|
30946
|
-
}
|
|
30947
|
-
function bindInitializer(node) {
|
|
30948
|
-
if (!node) {
|
|
30949
|
-
return;
|
|
30950
|
-
}
|
|
30951
|
-
const entryFlow = currentFlow;
|
|
30952
|
-
bind(node);
|
|
30953
|
-
if (entryFlow === unreachableFlow || entryFlow === currentFlow) {
|
|
30954
|
-
return;
|
|
30955
|
-
}
|
|
30956
|
-
const exitFlow = createBranchLabel();
|
|
30957
|
-
addAntecedent(exitFlow, entryFlow);
|
|
30958
|
-
addAntecedent(exitFlow, currentFlow);
|
|
30959
|
-
currentFlow = finishFlowLabel(exitFlow);
|
|
30960
|
-
}
|
|
30961
|
-
function bindJSDocTypeAlias(node) {
|
|
30962
|
-
bind(node.tagName);
|
|
30963
|
-
if (node.kind !== 343 /* JSDocEnumTag */ && node.fullName) {
|
|
30964
|
-
setParent(node.fullName, node);
|
|
30965
|
-
setParentRecursive(
|
|
30966
|
-
node.fullName,
|
|
30967
|
-
/*incremental*/
|
|
30968
|
-
false
|
|
30969
|
-
);
|
|
30970
|
-
}
|
|
30971
|
-
if (typeof node.comment !== "string") {
|
|
30972
|
-
bindEach(node.comment);
|
|
30973
|
-
}
|
|
30974
|
-
}
|
|
30975
|
-
function bindJSDocClassTag(node) {
|
|
30976
|
-
bindEachChild(node);
|
|
30977
|
-
const host = getHostSignatureFromJSDoc(node);
|
|
30978
|
-
if (host && host.kind !== 171 /* MethodDeclaration */) {
|
|
30979
|
-
addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
|
|
30980
|
-
}
|
|
30981
|
-
}
|
|
30982
|
-
function bindOptionalExpression(node, trueTarget, falseTarget) {
|
|
30983
|
-
doWithConditionalBranches(bind, node, trueTarget, falseTarget);
|
|
30984
|
-
if (!isOptionalChain(node) || isOutermostOptionalChain(node)) {
|
|
30985
|
-
addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
|
|
30986
|
-
addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
|
|
30987
|
-
}
|
|
30988
|
-
}
|
|
30989
|
-
function bindOptionalChainRest(node) {
|
|
30990
|
-
switch (node.kind) {
|
|
30991
|
-
case 208 /* PropertyAccessExpression */:
|
|
30992
|
-
bind(node.questionDotToken);
|
|
30993
|
-
bind(node.name);
|
|
30994
|
-
break;
|
|
30995
|
-
case 209 /* ElementAccessExpression */:
|
|
30996
|
-
bind(node.questionDotToken);
|
|
30997
|
-
bind(node.argumentExpression);
|
|
30998
|
-
break;
|
|
30999
|
-
case 210 /* CallExpression */:
|
|
31000
|
-
bind(node.questionDotToken);
|
|
31001
|
-
bindEach(node.typeArguments);
|
|
31002
|
-
bindEach(node.arguments);
|
|
31003
|
-
break;
|
|
31004
|
-
}
|
|
31005
|
-
}
|
|
31006
|
-
function bindOptionalChain(node, trueTarget, falseTarget) {
|
|
31007
|
-
const preChainLabel = isOptionalChainRoot(node) ? createBranchLabel() : void 0;
|
|
31008
|
-
bindOptionalExpression(node.expression, preChainLabel || trueTarget, falseTarget);
|
|
31009
|
-
if (preChainLabel) {
|
|
31010
|
-
currentFlow = finishFlowLabel(preChainLabel);
|
|
31011
|
-
}
|
|
31012
|
-
doWithConditionalBranches(bindOptionalChainRest, node, trueTarget, falseTarget);
|
|
31013
|
-
if (isOutermostOptionalChain(node)) {
|
|
31014
|
-
addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
|
|
31015
|
-
addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
|
|
31016
|
-
}
|
|
31017
|
-
}
|
|
31018
|
-
function bindOptionalChainFlow(node) {
|
|
31019
|
-
if (isTopLevelLogicalExpression(node)) {
|
|
31020
|
-
const postExpressionLabel = createBranchLabel();
|
|
31021
|
-
bindOptionalChain(node, postExpressionLabel, postExpressionLabel);
|
|
31022
|
-
currentFlow = finishFlowLabel(postExpressionLabel);
|
|
31023
|
-
} else {
|
|
31024
|
-
bindOptionalChain(node, currentTrueTarget, currentFalseTarget);
|
|
31025
|
-
}
|
|
31026
|
-
}
|
|
31027
|
-
function bindNonNullExpressionFlow(node) {
|
|
31028
|
-
if (isOptionalChain(node)) {
|
|
31029
|
-
bindOptionalChainFlow(node);
|
|
31030
|
-
} else {
|
|
31031
|
-
bindEachChild(node);
|
|
31032
|
-
}
|
|
31033
|
-
}
|
|
31034
|
-
function bindAccessExpressionFlow(node) {
|
|
31035
|
-
if (isOptionalChain(node)) {
|
|
31036
|
-
bindOptionalChainFlow(node);
|
|
31037
|
-
} else {
|
|
31038
|
-
bindEachChild(node);
|
|
31039
|
-
}
|
|
31040
|
-
}
|
|
31041
|
-
function bindCallExpressionFlow(node) {
|
|
31042
|
-
if (isOptionalChain(node)) {
|
|
31043
|
-
bindOptionalChainFlow(node);
|
|
31044
|
-
} else {
|
|
31045
|
-
const expr = skipParentheses(node.expression);
|
|
31046
|
-
if (expr.kind === 215 /* FunctionExpression */ || expr.kind === 216 /* ArrowFunction */) {
|
|
31047
|
-
bindEach(node.typeArguments);
|
|
31048
|
-
bindEach(node.arguments);
|
|
31049
|
-
bind(node.expression);
|
|
31050
|
-
} else {
|
|
31051
|
-
bindEachChild(node);
|
|
31052
|
-
if (node.expression.kind === 106 /* SuperKeyword */) {
|
|
31053
|
-
currentFlow = createFlowCall(currentFlow, node);
|
|
31054
|
-
}
|
|
31055
|
-
}
|
|
31056
|
-
}
|
|
31057
|
-
if (node.expression.kind === 208 /* PropertyAccessExpression */) {
|
|
31058
|
-
const propertyAccess = node.expression;
|
|
31059
|
-
if (isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && isPushOrUnshiftIdentifier(propertyAccess.name)) {
|
|
31060
|
-
currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
|
|
31061
|
-
}
|
|
31062
|
-
}
|
|
31063
|
-
}
|
|
31064
|
-
function addToContainerChain(next) {
|
|
31065
|
-
if (lastContainer) {
|
|
31066
|
-
lastContainer.nextContainer = next;
|
|
31067
|
-
}
|
|
31068
|
-
lastContainer = next;
|
|
31069
|
-
}
|
|
31070
|
-
function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) {
|
|
31071
|
-
switch (container.kind) {
|
|
31072
|
-
case 264 /* ModuleDeclaration */:
|
|
31073
|
-
return declareModuleMember(node, symbolFlags, symbolExcludes);
|
|
31074
|
-
case 308 /* SourceFile */:
|
|
31075
|
-
return declareSourceFileMember(node, symbolFlags, symbolExcludes);
|
|
31076
|
-
case 228 /* ClassExpression */:
|
|
31077
|
-
case 260 /* ClassDeclaration */:
|
|
31078
|
-
return declareClassMember(node, symbolFlags, symbolExcludes);
|
|
31079
|
-
case 263 /* EnumDeclaration */:
|
|
31080
|
-
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
31081
|
-
case 184 /* TypeLiteral */:
|
|
31082
|
-
case 325 /* JSDocTypeLiteral */:
|
|
31083
|
-
case 207 /* ObjectLiteralExpression */:
|
|
31084
|
-
case 261 /* InterfaceDeclaration */:
|
|
31085
|
-
case 289 /* JsxAttributes */:
|
|
31086
|
-
return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
|
|
31087
|
-
case 181 /* FunctionType */:
|
|
31088
|
-
case 182 /* ConstructorType */:
|
|
31089
|
-
case 176 /* CallSignature */:
|
|
31090
|
-
case 177 /* ConstructSignature */:
|
|
31091
|
-
case 326 /* JSDocSignature */:
|
|
31092
|
-
case 178 /* IndexSignature */:
|
|
31093
|
-
case 171 /* MethodDeclaration */:
|
|
31094
|
-
case 170 /* MethodSignature */:
|
|
31095
|
-
case 173 /* Constructor */:
|
|
31096
|
-
case 174 /* GetAccessor */:
|
|
31097
|
-
case 175 /* SetAccessor */:
|
|
31098
|
-
case 259 /* FunctionDeclaration */:
|
|
31099
|
-
case 215 /* FunctionExpression */:
|
|
31100
|
-
case 216 /* ArrowFunction */:
|
|
31101
|
-
case 320 /* JSDocFunctionType */:
|
|
31102
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
31103
|
-
case 262 /* TypeAliasDeclaration */:
|
|
31104
|
-
case 197 /* MappedType */:
|
|
31105
|
-
if (container.locals)
|
|
31106
|
-
Debug.assertNode(container, canHaveLocals);
|
|
31107
|
-
return declareSymbol(
|
|
31108
|
-
container.locals,
|
|
31109
|
-
/*parent*/
|
|
31110
|
-
void 0,
|
|
31111
|
-
node,
|
|
31112
|
-
symbolFlags,
|
|
31113
|
-
symbolExcludes
|
|
31114
|
-
);
|
|
31115
|
-
}
|
|
31116
|
-
}
|
|
31117
|
-
function declareClassMember(node, symbolFlags, symbolExcludes) {
|
|
31118
|
-
return isStatic(node) ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
|
|
31119
|
-
}
|
|
31120
|
-
function declareSourceFileMember(node, symbolFlags, symbolExcludes) {
|
|
31121
|
-
return isExternalModule(file) ? declareModuleMember(node, symbolFlags, symbolExcludes) : declareSymbol(
|
|
31122
|
-
file.locals,
|
|
31123
|
-
/*parent*/
|
|
31124
|
-
void 0,
|
|
31125
|
-
node,
|
|
31126
|
-
symbolFlags,
|
|
31127
|
-
symbolExcludes
|
|
31128
|
-
);
|
|
31129
|
-
}
|
|
31130
|
-
function hasExportDeclarations(node) {
|
|
31131
|
-
const body = isSourceFile(node) ? node : tryCast(node.body, isModuleBlock);
|
|
31132
|
-
return !!body && body.statements.some((s) => isExportDeclaration(s) || isExportAssignment(s));
|
|
31133
|
-
}
|
|
31134
|
-
function setExportContextFlag(node) {
|
|
31135
|
-
if (node.flags & 16777216 /* Ambient */ && !hasExportDeclarations(node)) {
|
|
31136
|
-
node.flags |= 64 /* ExportContext */;
|
|
31137
|
-
} else {
|
|
31138
|
-
node.flags &= ~64 /* ExportContext */;
|
|
31139
|
-
}
|
|
31140
|
-
}
|
|
31141
|
-
function bindModuleDeclaration(node) {
|
|
31142
|
-
setExportContextFlag(node);
|
|
31143
|
-
if (isAmbientModule(node)) {
|
|
31144
|
-
if (hasSyntacticModifier(node, 1 /* Export */)) {
|
|
31145
|
-
errorOnFirstToken(node, Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible);
|
|
31146
|
-
}
|
|
31147
|
-
if (isModuleAugmentationExternal(node)) {
|
|
31148
|
-
declareModuleSymbol(node);
|
|
31149
|
-
} else {
|
|
31150
|
-
let pattern;
|
|
31151
|
-
if (node.name.kind === 10 /* StringLiteral */) {
|
|
31152
|
-
const { text } = node.name;
|
|
31153
|
-
pattern = tryParsePattern(text);
|
|
31154
|
-
if (pattern === void 0) {
|
|
31155
|
-
errorOnFirstToken(node.name, Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
|
|
31156
|
-
}
|
|
31157
|
-
}
|
|
31158
|
-
const symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
|
|
31159
|
-
file.patternAmbientModules = append(file.patternAmbientModules, pattern && !isString(pattern) ? { pattern, symbol } : void 0);
|
|
31160
|
-
}
|
|
31161
|
-
} else {
|
|
31162
|
-
const state = declareModuleSymbol(node);
|
|
31163
|
-
if (state !== 0 /* NonInstantiated */) {
|
|
31164
|
-
const { symbol } = node;
|
|
31165
|
-
symbol.constEnumOnlyModule = !(symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) && state === 2 /* ConstEnumOnly */ && symbol.constEnumOnlyModule !== false;
|
|
31166
|
-
}
|
|
31167
|
-
}
|
|
31168
|
-
}
|
|
31169
|
-
function declareModuleSymbol(node) {
|
|
31170
|
-
const state = getModuleInstanceState(node);
|
|
31171
|
-
const instantiated = state !== 0 /* NonInstantiated */;
|
|
31172
|
-
declareSymbolAndAddToSymbolTable(
|
|
31173
|
-
node,
|
|
31174
|
-
instantiated ? 512 /* ValueModule */ : 1024 /* NamespaceModule */,
|
|
31175
|
-
instantiated ? 110735 /* ValueModuleExcludes */ : 0 /* NamespaceModuleExcludes */
|
|
31176
|
-
);
|
|
31177
|
-
return state;
|
|
31178
|
-
}
|
|
31179
|
-
function bindFunctionOrConstructorType(node) {
|
|
31180
|
-
const symbol = createSymbol(131072 /* Signature */, getDeclarationName(node));
|
|
31181
|
-
addDeclarationToSymbol(symbol, node, 131072 /* Signature */);
|
|
31182
|
-
const typeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
|
|
31183
|
-
addDeclarationToSymbol(typeLiteralSymbol, node, 2048 /* TypeLiteral */);
|
|
31184
|
-
typeLiteralSymbol.members = createSymbolTable();
|
|
31185
|
-
typeLiteralSymbol.members.set(symbol.escapedName, symbol);
|
|
31186
|
-
}
|
|
31187
|
-
function bindObjectLiteralExpression(node) {
|
|
31188
|
-
return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object" /* Object */);
|
|
31189
|
-
}
|
|
31190
|
-
function bindJsxAttributes(node) {
|
|
31191
|
-
return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__jsxAttributes" /* JSXAttributes */);
|
|
31192
|
-
}
|
|
31193
|
-
function bindJsxAttribute(node, symbolFlags, symbolExcludes) {
|
|
31194
|
-
return declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
|
|
31195
|
-
}
|
|
31196
|
-
function bindAnonymousDeclaration(node, symbolFlags, name) {
|
|
31197
|
-
const symbol = createSymbol(symbolFlags, name);
|
|
31198
|
-
if (symbolFlags & (8 /* EnumMember */ | 106500 /* ClassMember */)) {
|
|
31199
|
-
symbol.parent = container.symbol;
|
|
31200
|
-
}
|
|
31201
|
-
addDeclarationToSymbol(symbol, node, symbolFlags);
|
|
31202
|
-
return symbol;
|
|
31203
|
-
}
|
|
31204
|
-
function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
|
|
31205
|
-
switch (blockScopeContainer.kind) {
|
|
31206
|
-
case 264 /* ModuleDeclaration */:
|
|
31207
|
-
declareModuleMember(node, symbolFlags, symbolExcludes);
|
|
31208
|
-
break;
|
|
31209
|
-
case 308 /* SourceFile */:
|
|
31210
|
-
if (isExternalOrCommonJsModule(container)) {
|
|
31211
|
-
declareModuleMember(node, symbolFlags, symbolExcludes);
|
|
31212
|
-
break;
|
|
31213
|
-
}
|
|
31214
|
-
default:
|
|
31215
|
-
Debug.assertNode(blockScopeContainer, canHaveLocals);
|
|
31216
|
-
if (!blockScopeContainer.locals) {
|
|
31217
|
-
blockScopeContainer.locals = createSymbolTable();
|
|
31218
|
-
addToContainerChain(blockScopeContainer);
|
|
31219
|
-
}
|
|
31220
|
-
declareSymbol(
|
|
31221
|
-
blockScopeContainer.locals,
|
|
31222
|
-
/*parent*/
|
|
31223
|
-
void 0,
|
|
31224
|
-
node,
|
|
31225
|
-
symbolFlags,
|
|
31226
|
-
symbolExcludes
|
|
31227
|
-
);
|
|
31228
|
-
}
|
|
31229
|
-
}
|
|
31230
|
-
function delayedBindJSDocTypedefTag() {
|
|
31231
|
-
if (!delayedTypeAliases) {
|
|
31232
|
-
return;
|
|
31233
|
-
}
|
|
31234
|
-
const saveContainer = container;
|
|
31235
|
-
const saveLastContainer = lastContainer;
|
|
31236
|
-
const saveBlockScopeContainer = blockScopeContainer;
|
|
31237
|
-
const saveParent = parent;
|
|
31238
|
-
const saveCurrentFlow = currentFlow;
|
|
31239
|
-
for (const typeAlias of delayedTypeAliases) {
|
|
31240
|
-
const host = typeAlias.parent.parent;
|
|
31241
|
-
container = findAncestor(host.parent, (n) => !!(getContainerFlags(n) & 1 /* IsContainer */)) || file;
|
|
31242
|
-
blockScopeContainer = getEnclosingBlockScopeContainer(host) || file;
|
|
31243
|
-
currentFlow = initFlowNode({ flags: 2 /* Start */ });
|
|
31244
|
-
parent = typeAlias;
|
|
31245
|
-
bind(typeAlias.typeExpression);
|
|
31246
|
-
const declName = getNameOfDeclaration(typeAlias);
|
|
31247
|
-
if ((isJSDocEnumTag(typeAlias) || !typeAlias.fullName) && declName && isPropertyAccessEntityNameExpression(declName.parent)) {
|
|
31248
|
-
const isTopLevel = isTopLevelNamespaceAssignment(declName.parent);
|
|
31249
|
-
if (isTopLevel) {
|
|
31250
|
-
bindPotentiallyMissingNamespaces(
|
|
31251
|
-
file.symbol,
|
|
31252
|
-
declName.parent,
|
|
31253
|
-
isTopLevel,
|
|
31254
|
-
!!findAncestor(declName, (d) => isPropertyAccessExpression(d) && d.name.escapedText === "prototype"),
|
|
31255
|
-
/*containerIsClass*/
|
|
31256
|
-
false
|
|
31257
|
-
);
|
|
31258
|
-
const oldContainer = container;
|
|
31259
|
-
switch (getAssignmentDeclarationPropertyAccessKind(declName.parent)) {
|
|
31260
|
-
case 1 /* ExportsProperty */:
|
|
31261
|
-
case 2 /* ModuleExports */:
|
|
31262
|
-
if (!isExternalOrCommonJsModule(file)) {
|
|
31263
|
-
container = void 0;
|
|
31264
|
-
} else {
|
|
31265
|
-
container = file;
|
|
31266
|
-
}
|
|
31267
|
-
break;
|
|
31268
|
-
case 4 /* ThisProperty */:
|
|
31269
|
-
container = declName.parent.expression;
|
|
31270
|
-
break;
|
|
31271
|
-
case 3 /* PrototypeProperty */:
|
|
31272
|
-
container = declName.parent.expression.name;
|
|
31273
|
-
break;
|
|
31274
|
-
case 5 /* Property */:
|
|
31275
|
-
container = isExportsOrModuleExportsOrAlias(file, declName.parent.expression) ? file : isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression;
|
|
31276
|
-
break;
|
|
31277
|
-
case 0 /* None */:
|
|
31278
|
-
return Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration");
|
|
31279
|
-
}
|
|
31280
|
-
if (container) {
|
|
31281
|
-
declareModuleMember(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
|
|
31282
|
-
}
|
|
31283
|
-
container = oldContainer;
|
|
31284
|
-
}
|
|
31285
|
-
} else if (isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
|
|
31286
|
-
parent = typeAlias.parent;
|
|
31287
|
-
bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
|
|
31288
|
-
} else {
|
|
31289
|
-
bind(typeAlias.fullName);
|
|
31290
|
-
}
|
|
31291
|
-
}
|
|
31292
|
-
container = saveContainer;
|
|
31293
|
-
lastContainer = saveLastContainer;
|
|
31294
|
-
blockScopeContainer = saveBlockScopeContainer;
|
|
31295
|
-
parent = saveParent;
|
|
31296
|
-
currentFlow = saveCurrentFlow;
|
|
31297
|
-
}
|
|
31298
|
-
function checkContextualIdentifier(node) {
|
|
31299
|
-
if (!file.parseDiagnostics.length && !(node.flags & 16777216 /* Ambient */) && !(node.flags & 8388608 /* JSDoc */) && !isIdentifierName(node)) {
|
|
31300
|
-
const originalKeywordKind = identifierToKeywordKind(node);
|
|
31301
|
-
if (originalKeywordKind === void 0) {
|
|
31302
|
-
return;
|
|
31303
|
-
}
|
|
31304
|
-
if (inStrictMode && originalKeywordKind >= 117 /* FirstFutureReservedWord */ && originalKeywordKind <= 125 /* LastFutureReservedWord */) {
|
|
31305
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(
|
|
31306
|
-
node,
|
|
31307
|
-
getStrictModeIdentifierMessage(node),
|
|
31308
|
-
declarationNameToString(node)
|
|
31309
|
-
));
|
|
31310
|
-
} else if (originalKeywordKind === 133 /* AwaitKeyword */) {
|
|
31311
|
-
if (isExternalModule(file) && isInTopLevelContext(node)) {
|
|
31312
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(
|
|
31313
|
-
node,
|
|
31314
|
-
Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module,
|
|
31315
|
-
declarationNameToString(node)
|
|
31316
|
-
));
|
|
31317
|
-
} else if (node.flags & 32768 /* AwaitContext */) {
|
|
31318
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(
|
|
31319
|
-
node,
|
|
31320
|
-
Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,
|
|
31321
|
-
declarationNameToString(node)
|
|
31322
|
-
));
|
|
31323
|
-
}
|
|
31324
|
-
} else if (originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
|
|
31325
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(
|
|
31326
|
-
node,
|
|
31327
|
-
Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,
|
|
31328
|
-
declarationNameToString(node)
|
|
31329
|
-
));
|
|
31330
|
-
}
|
|
31331
|
-
}
|
|
31332
|
-
}
|
|
31333
|
-
function getStrictModeIdentifierMessage(node) {
|
|
31334
|
-
if (getContainingClass(node)) {
|
|
31335
|
-
return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode;
|
|
31336
|
-
}
|
|
31337
|
-
if (file.externalModuleIndicator) {
|
|
31338
|
-
return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode;
|
|
31339
|
-
}
|
|
31340
|
-
return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode;
|
|
31341
|
-
}
|
|
31342
|
-
function checkPrivateIdentifier(node) {
|
|
31343
|
-
if (node.escapedText === "#constructor") {
|
|
31344
|
-
if (!file.parseDiagnostics.length) {
|
|
31345
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(
|
|
31346
|
-
node,
|
|
31347
|
-
Diagnostics.constructor_is_a_reserved_word,
|
|
31348
|
-
declarationNameToString(node)
|
|
31349
|
-
));
|
|
31350
|
-
}
|
|
31351
|
-
}
|
|
31352
|
-
}
|
|
31353
|
-
function checkStrictModeBinaryExpression(node) {
|
|
31354
|
-
if (inStrictMode && isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) {
|
|
31355
|
-
checkStrictModeEvalOrArguments(node, node.left);
|
|
31356
|
-
}
|
|
31357
|
-
}
|
|
31358
|
-
function checkStrictModeCatchClause(node) {
|
|
31359
|
-
if (inStrictMode && node.variableDeclaration) {
|
|
31360
|
-
checkStrictModeEvalOrArguments(node, node.variableDeclaration.name);
|
|
31361
|
-
}
|
|
31362
|
-
}
|
|
31363
|
-
function checkStrictModeDeleteExpression(node) {
|
|
31364
|
-
if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
|
|
31365
|
-
const span = getErrorSpanForNode(file, node.expression);
|
|
31366
|
-
file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));
|
|
31367
|
-
}
|
|
31368
|
-
}
|
|
31369
|
-
function isEvalOrArgumentsIdentifier(node) {
|
|
31370
|
-
return isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
|
|
31371
|
-
}
|
|
31372
|
-
function checkStrictModeEvalOrArguments(contextNode, name) {
|
|
31373
|
-
if (name && name.kind === 79 /* Identifier */) {
|
|
31374
|
-
const identifier = name;
|
|
31375
|
-
if (isEvalOrArgumentsIdentifier(identifier)) {
|
|
31376
|
-
const span = getErrorSpanForNode(file, name);
|
|
31377
|
-
file.bindDiagnostics.push(createFileDiagnostic(
|
|
31378
|
-
file,
|
|
31379
|
-
span.start,
|
|
31380
|
-
span.length,
|
|
31381
|
-
getStrictModeEvalOrArgumentsMessage(contextNode),
|
|
31382
|
-
idText(identifier)
|
|
31383
|
-
));
|
|
31384
|
-
}
|
|
31385
|
-
}
|
|
31386
|
-
}
|
|
31387
|
-
function getStrictModeEvalOrArgumentsMessage(node) {
|
|
31388
|
-
if (getContainingClass(node)) {
|
|
31389
|
-
return Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
|
|
31390
|
-
}
|
|
31391
|
-
if (file.externalModuleIndicator) {
|
|
31392
|
-
return Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
|
|
31393
|
-
}
|
|
31394
|
-
return Diagnostics.Invalid_use_of_0_in_strict_mode;
|
|
31395
|
-
}
|
|
31396
|
-
function checkStrictModeFunctionName(node) {
|
|
31397
|
-
if (inStrictMode) {
|
|
31398
|
-
checkStrictModeEvalOrArguments(node, node.name);
|
|
31399
|
-
}
|
|
31400
|
-
}
|
|
31401
|
-
function getStrictModeBlockScopeFunctionDeclarationMessage(node) {
|
|
31402
|
-
if (getContainingClass(node)) {
|
|
31403
|
-
return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode;
|
|
31404
|
-
}
|
|
31405
|
-
if (file.externalModuleIndicator) {
|
|
31406
|
-
return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode;
|
|
31407
|
-
}
|
|
31408
|
-
return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5;
|
|
31409
|
-
}
|
|
31410
|
-
function checkStrictModeFunctionDeclaration(node) {
|
|
31411
|
-
if (languageVersion < 2 /* ES2015 */) {
|
|
31412
|
-
if (blockScopeContainer.kind !== 308 /* SourceFile */ && blockScopeContainer.kind !== 264 /* ModuleDeclaration */ && !isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
|
|
31413
|
-
const errorSpan = getErrorSpanForNode(file, node);
|
|
31414
|
-
file.bindDiagnostics.push(createFileDiagnostic(
|
|
31415
|
-
file,
|
|
31416
|
-
errorSpan.start,
|
|
31417
|
-
errorSpan.length,
|
|
31418
|
-
getStrictModeBlockScopeFunctionDeclarationMessage(node)
|
|
31419
|
-
));
|
|
31420
|
-
}
|
|
31421
|
-
}
|
|
31422
|
-
}
|
|
31423
|
-
function checkStrictModeNumericLiteral(node) {
|
|
31424
|
-
if (languageVersion < 1 /* ES5 */ && inStrictMode && node.numericLiteralFlags & 32 /* Octal */) {
|
|
31425
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode));
|
|
31426
|
-
}
|
|
31427
|
-
}
|
|
31428
|
-
function checkStrictModePostfixUnaryExpression(node) {
|
|
31429
|
-
if (inStrictMode) {
|
|
31430
|
-
checkStrictModeEvalOrArguments(node, node.operand);
|
|
31431
|
-
}
|
|
31432
|
-
}
|
|
31433
|
-
function checkStrictModePrefixUnaryExpression(node) {
|
|
31434
|
-
if (inStrictMode) {
|
|
31435
|
-
if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
|
|
31436
|
-
checkStrictModeEvalOrArguments(node, node.operand);
|
|
31437
|
-
}
|
|
31438
|
-
}
|
|
31439
|
-
}
|
|
31440
|
-
function checkStrictModeWithStatement(node) {
|
|
31441
|
-
if (inStrictMode) {
|
|
31442
|
-
errorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode);
|
|
31443
|
-
}
|
|
31444
|
-
}
|
|
31445
|
-
function checkStrictModeLabeledStatement(node) {
|
|
31446
|
-
if (inStrictMode && getEmitScriptTarget(options) >= 2 /* ES2015 */) {
|
|
31447
|
-
if (isDeclarationStatement(node.statement) || isVariableStatement(node.statement)) {
|
|
31448
|
-
errorOnFirstToken(node.label, Diagnostics.A_label_is_not_allowed_here);
|
|
31449
|
-
}
|
|
31450
|
-
}
|
|
31451
|
-
}
|
|
31452
|
-
function errorOnFirstToken(node, message, arg0, arg1, arg2) {
|
|
31453
|
-
const span = getSpanOfTokenAtPosition(file, node.pos);
|
|
31454
|
-
file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2));
|
|
31455
|
-
}
|
|
31456
|
-
function errorOrSuggestionOnNode(isError, node, message) {
|
|
31457
|
-
errorOrSuggestionOnRange(isError, node, node, message);
|
|
31458
|
-
}
|
|
31459
|
-
function errorOrSuggestionOnRange(isError, startNode, endNode, message) {
|
|
31460
|
-
addErrorOrSuggestionDiagnostic(isError, { pos: getTokenPosOfNode(startNode, file), end: endNode.end }, message);
|
|
31461
|
-
}
|
|
31462
|
-
function addErrorOrSuggestionDiagnostic(isError, range, message) {
|
|
31463
|
-
const diag2 = createFileDiagnostic(file, range.pos, range.end - range.pos, message);
|
|
31464
|
-
if (isError) {
|
|
31465
|
-
file.bindDiagnostics.push(diag2);
|
|
31466
|
-
} else {
|
|
31467
|
-
file.bindSuggestionDiagnostics = append(file.bindSuggestionDiagnostics, { ...diag2, category: 2 /* Suggestion */ });
|
|
31468
|
-
}
|
|
31469
|
-
}
|
|
31470
|
-
function bind(node) {
|
|
31471
|
-
if (!node) {
|
|
31472
|
-
return;
|
|
31473
|
-
}
|
|
31474
|
-
setParent(node, parent);
|
|
31475
|
-
if (tracing)
|
|
31476
|
-
node.tracingPath = file.path;
|
|
31477
|
-
const saveInStrictMode = inStrictMode;
|
|
31478
|
-
bindWorker(node);
|
|
31479
|
-
if (node.kind > 162 /* LastToken */) {
|
|
31480
|
-
const saveParent = parent;
|
|
31481
|
-
parent = node;
|
|
31482
|
-
const containerFlags = getContainerFlags(node);
|
|
31483
|
-
if (containerFlags === 0 /* None */) {
|
|
31484
|
-
bindChildren(node);
|
|
31485
|
-
} else {
|
|
31486
|
-
bindContainer(node, containerFlags);
|
|
31487
|
-
}
|
|
31488
|
-
parent = saveParent;
|
|
31489
|
-
} else {
|
|
31490
|
-
const saveParent = parent;
|
|
31491
|
-
if (node.kind === 1 /* EndOfFileToken */)
|
|
31492
|
-
parent = node;
|
|
31493
|
-
bindJSDoc(node);
|
|
31494
|
-
parent = saveParent;
|
|
31495
|
-
}
|
|
31496
|
-
inStrictMode = saveInStrictMode;
|
|
31497
|
-
}
|
|
31498
|
-
function bindJSDoc(node) {
|
|
31499
|
-
if (hasJSDocNodes(node)) {
|
|
31500
|
-
if (isInJSFile(node)) {
|
|
31501
|
-
for (const j of node.jsDoc) {
|
|
31502
|
-
bind(j);
|
|
31503
|
-
}
|
|
31504
|
-
} else {
|
|
31505
|
-
for (const j of node.jsDoc) {
|
|
31506
|
-
setParent(j, node);
|
|
31507
|
-
setParentRecursive(
|
|
31508
|
-
j,
|
|
31509
|
-
/*incremental*/
|
|
31510
|
-
false
|
|
31511
|
-
);
|
|
31512
|
-
}
|
|
31513
|
-
}
|
|
31514
|
-
}
|
|
31515
|
-
}
|
|
31516
|
-
function updateStrictModeStatementList(statements) {
|
|
31517
|
-
if (!inStrictMode) {
|
|
31518
|
-
for (const statement of statements) {
|
|
31519
|
-
if (!isPrologueDirective(statement)) {
|
|
31520
|
-
return;
|
|
31521
|
-
}
|
|
31522
|
-
if (isUseStrictPrologueDirective(statement)) {
|
|
31523
|
-
inStrictMode = true;
|
|
31524
|
-
return;
|
|
31525
|
-
}
|
|
31526
|
-
}
|
|
31527
|
-
}
|
|
31528
|
-
}
|
|
31529
|
-
function isUseStrictPrologueDirective(node) {
|
|
31530
|
-
const nodeText = getSourceTextOfNodeFromSourceFile(file, node.expression);
|
|
31531
|
-
return nodeText === '"use strict"' || nodeText === "'use strict'";
|
|
31532
|
-
}
|
|
31533
|
-
function bindWorker(node) {
|
|
31534
|
-
switch (node.kind) {
|
|
31535
|
-
case 79 /* Identifier */:
|
|
31536
|
-
if (node.flags & 2048 /* IdentifierIsInJSDocNamespace */) {
|
|
31537
|
-
let parentNode = node.parent;
|
|
31538
|
-
while (parentNode && !isJSDocTypeAlias(parentNode)) {
|
|
31539
|
-
parentNode = parentNode.parent;
|
|
31540
|
-
}
|
|
31541
|
-
bindBlockScopedDeclaration(parentNode, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
|
|
31542
|
-
break;
|
|
31543
|
-
}
|
|
31544
|
-
case 108 /* ThisKeyword */:
|
|
31545
|
-
if (currentFlow && (isExpression(node) || parent.kind === 300 /* ShorthandPropertyAssignment */)) {
|
|
31546
|
-
node.flowNode = currentFlow;
|
|
31547
|
-
}
|
|
31548
|
-
return checkContextualIdentifier(node);
|
|
31549
|
-
case 163 /* QualifiedName */:
|
|
31550
|
-
if (currentFlow && isPartOfTypeQuery(node)) {
|
|
31551
|
-
node.flowNode = currentFlow;
|
|
31552
|
-
}
|
|
31553
|
-
break;
|
|
31554
|
-
case 233 /* MetaProperty */:
|
|
31555
|
-
case 106 /* SuperKeyword */:
|
|
31556
|
-
node.flowNode = currentFlow;
|
|
31557
|
-
break;
|
|
31558
|
-
case 80 /* PrivateIdentifier */:
|
|
31559
|
-
return checkPrivateIdentifier(node);
|
|
31560
|
-
case 208 /* PropertyAccessExpression */:
|
|
31561
|
-
case 209 /* ElementAccessExpression */:
|
|
31562
|
-
const expr = node;
|
|
31563
|
-
if (currentFlow && isNarrowableReference(expr)) {
|
|
31564
|
-
expr.flowNode = currentFlow;
|
|
31565
|
-
}
|
|
31566
|
-
if (isSpecialPropertyDeclaration(expr)) {
|
|
31567
|
-
bindSpecialPropertyDeclaration(expr);
|
|
31568
|
-
}
|
|
31569
|
-
if (isInJSFile(expr) && file.commonJsModuleIndicator && isModuleExportsAccessExpression(expr) && !lookupSymbolForName(blockScopeContainer, "module")) {
|
|
31570
|
-
declareSymbol(
|
|
31571
|
-
file.locals,
|
|
31572
|
-
/*parent*/
|
|
31573
|
-
void 0,
|
|
31574
|
-
expr.expression,
|
|
31575
|
-
1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */,
|
|
31576
|
-
111550 /* FunctionScopedVariableExcludes */
|
|
31577
|
-
);
|
|
31578
|
-
}
|
|
31579
|
-
break;
|
|
31580
|
-
case 223 /* BinaryExpression */:
|
|
31581
|
-
const specialKind = getAssignmentDeclarationKind(node);
|
|
31582
|
-
switch (specialKind) {
|
|
31583
|
-
case 1 /* ExportsProperty */:
|
|
31584
|
-
bindExportsPropertyAssignment(node);
|
|
31585
|
-
break;
|
|
31586
|
-
case 2 /* ModuleExports */:
|
|
31587
|
-
bindModuleExportsAssignment(node);
|
|
31588
|
-
break;
|
|
31589
|
-
case 3 /* PrototypeProperty */:
|
|
31590
|
-
bindPrototypePropertyAssignment(node.left, node);
|
|
31591
|
-
break;
|
|
31592
|
-
case 6 /* Prototype */:
|
|
31593
|
-
bindPrototypeAssignment(node);
|
|
31594
|
-
break;
|
|
31595
|
-
case 4 /* ThisProperty */:
|
|
31596
|
-
bindThisPropertyAssignment(node);
|
|
31597
|
-
break;
|
|
31598
|
-
case 5 /* Property */:
|
|
31599
|
-
const expression = node.left.expression;
|
|
31600
|
-
if (isInJSFile(node) && isIdentifier(expression)) {
|
|
31601
|
-
const symbol = lookupSymbolForName(blockScopeContainer, expression.escapedText);
|
|
31602
|
-
if (isThisInitializedDeclaration(symbol == null ? void 0 : symbol.valueDeclaration)) {
|
|
31603
|
-
bindThisPropertyAssignment(node);
|
|
31604
|
-
break;
|
|
31605
|
-
}
|
|
31606
|
-
}
|
|
31607
|
-
bindSpecialPropertyAssignment(node);
|
|
31608
|
-
break;
|
|
31609
|
-
case 0 /* None */:
|
|
31610
|
-
break;
|
|
31611
|
-
default:
|
|
31612
|
-
Debug.fail("Unknown binary expression special property assignment kind");
|
|
31613
|
-
}
|
|
31614
|
-
return checkStrictModeBinaryExpression(node);
|
|
31615
|
-
case 295 /* CatchClause */:
|
|
31616
|
-
return checkStrictModeCatchClause(node);
|
|
31617
|
-
case 217 /* DeleteExpression */:
|
|
31618
|
-
return checkStrictModeDeleteExpression(node);
|
|
31619
|
-
case 8 /* NumericLiteral */:
|
|
31620
|
-
return checkStrictModeNumericLiteral(node);
|
|
31621
|
-
case 222 /* PostfixUnaryExpression */:
|
|
31622
|
-
return checkStrictModePostfixUnaryExpression(node);
|
|
31623
|
-
case 221 /* PrefixUnaryExpression */:
|
|
31624
|
-
return checkStrictModePrefixUnaryExpression(node);
|
|
31625
|
-
case 251 /* WithStatement */:
|
|
31626
|
-
return checkStrictModeWithStatement(node);
|
|
31627
|
-
case 253 /* LabeledStatement */:
|
|
31628
|
-
return checkStrictModeLabeledStatement(node);
|
|
31629
|
-
case 194 /* ThisType */:
|
|
31630
|
-
seenThisKeyword = true;
|
|
31631
|
-
return;
|
|
31632
|
-
case 179 /* TypePredicate */:
|
|
31633
|
-
break;
|
|
31634
|
-
case 165 /* TypeParameter */:
|
|
31635
|
-
return bindTypeParameter(node);
|
|
31636
|
-
case 166 /* Parameter */:
|
|
31637
|
-
return bindParameter(node);
|
|
31638
|
-
case 257 /* VariableDeclaration */:
|
|
31639
|
-
return bindVariableDeclarationOrBindingElement(node);
|
|
31640
|
-
case 205 /* BindingElement */:
|
|
31641
|
-
node.flowNode = currentFlow;
|
|
31642
|
-
return bindVariableDeclarationOrBindingElement(node);
|
|
31643
|
-
case 169 /* PropertyDeclaration */:
|
|
31644
|
-
case 168 /* PropertySignature */:
|
|
31645
|
-
return bindPropertyWorker(node);
|
|
31646
|
-
case 299 /* PropertyAssignment */:
|
|
31647
|
-
case 300 /* ShorthandPropertyAssignment */:
|
|
31648
|
-
return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
|
|
31649
|
-
case 302 /* EnumMember */:
|
|
31650
|
-
return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
|
|
31651
|
-
case 176 /* CallSignature */:
|
|
31652
|
-
case 177 /* ConstructSignature */:
|
|
31653
|
-
case 178 /* IndexSignature */:
|
|
31654
|
-
return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
|
|
31655
|
-
case 171 /* MethodDeclaration */:
|
|
31656
|
-
case 170 /* MethodSignature */:
|
|
31657
|
-
return bindPropertyOrMethodOrAccessor(
|
|
31658
|
-
node,
|
|
31659
|
-
8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */),
|
|
31660
|
-
isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */
|
|
31661
|
-
);
|
|
31662
|
-
case 259 /* FunctionDeclaration */:
|
|
31663
|
-
return bindFunctionDeclaration(node);
|
|
31664
|
-
case 173 /* Constructor */:
|
|
31665
|
-
return declareSymbolAndAddToSymbolTable(
|
|
31666
|
-
node,
|
|
31667
|
-
16384 /* Constructor */,
|
|
31668
|
-
/*symbolExcludes:*/
|
|
31669
|
-
0 /* None */
|
|
31670
|
-
);
|
|
31671
|
-
case 174 /* GetAccessor */:
|
|
31672
|
-
return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
|
|
31673
|
-
case 175 /* SetAccessor */:
|
|
31674
|
-
return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
|
|
31675
|
-
case 181 /* FunctionType */:
|
|
31676
|
-
case 320 /* JSDocFunctionType */:
|
|
31677
|
-
case 326 /* JSDocSignature */:
|
|
31678
|
-
case 182 /* ConstructorType */:
|
|
31679
|
-
return bindFunctionOrConstructorType(node);
|
|
31680
|
-
case 184 /* TypeLiteral */:
|
|
31681
|
-
case 325 /* JSDocTypeLiteral */:
|
|
31682
|
-
case 197 /* MappedType */:
|
|
31683
|
-
return bindAnonymousTypeWorker(node);
|
|
31684
|
-
case 335 /* JSDocClassTag */:
|
|
31685
|
-
return bindJSDocClassTag(node);
|
|
31686
|
-
case 207 /* ObjectLiteralExpression */:
|
|
31687
|
-
return bindObjectLiteralExpression(node);
|
|
31688
|
-
case 215 /* FunctionExpression */:
|
|
31689
|
-
case 216 /* ArrowFunction */:
|
|
31690
|
-
return bindFunctionExpression(node);
|
|
31691
|
-
case 210 /* CallExpression */:
|
|
31692
|
-
const assignmentKind = getAssignmentDeclarationKind(node);
|
|
31693
|
-
switch (assignmentKind) {
|
|
31694
|
-
case 7 /* ObjectDefinePropertyValue */:
|
|
31695
|
-
return bindObjectDefinePropertyAssignment(node);
|
|
31696
|
-
case 8 /* ObjectDefinePropertyExports */:
|
|
31697
|
-
return bindObjectDefinePropertyExport(node);
|
|
31698
|
-
case 9 /* ObjectDefinePrototypeProperty */:
|
|
31699
|
-
return bindObjectDefinePrototypeProperty(node);
|
|
31700
|
-
case 0 /* None */:
|
|
31701
|
-
break;
|
|
31702
|
-
default:
|
|
31703
|
-
return Debug.fail("Unknown call expression assignment declaration kind");
|
|
31704
|
-
}
|
|
31705
|
-
if (isInJSFile(node)) {
|
|
31706
|
-
bindCallExpression(node);
|
|
31707
|
-
}
|
|
31708
|
-
break;
|
|
31709
|
-
case 228 /* ClassExpression */:
|
|
31710
|
-
case 260 /* ClassDeclaration */:
|
|
31711
|
-
inStrictMode = true;
|
|
31712
|
-
return bindClassLikeDeclaration(node);
|
|
31713
|
-
case 261 /* InterfaceDeclaration */:
|
|
31714
|
-
return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
|
|
31715
|
-
case 262 /* TypeAliasDeclaration */:
|
|
31716
|
-
return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
|
|
31717
|
-
case 263 /* EnumDeclaration */:
|
|
31718
|
-
return bindEnumDeclaration(node);
|
|
31719
|
-
case 264 /* ModuleDeclaration */:
|
|
31720
|
-
return bindModuleDeclaration(node);
|
|
31721
|
-
case 289 /* JsxAttributes */:
|
|
31722
|
-
return bindJsxAttributes(node);
|
|
31723
|
-
case 288 /* JsxAttribute */:
|
|
31724
|
-
return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
|
|
31725
|
-
case 268 /* ImportEqualsDeclaration */:
|
|
31726
|
-
case 271 /* NamespaceImport */:
|
|
31727
|
-
case 273 /* ImportSpecifier */:
|
|
31728
|
-
case 278 /* ExportSpecifier */:
|
|
31729
|
-
return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
|
|
31730
|
-
case 267 /* NamespaceExportDeclaration */:
|
|
31731
|
-
return bindNamespaceExportDeclaration(node);
|
|
31732
|
-
case 270 /* ImportClause */:
|
|
31733
|
-
return bindImportClause(node);
|
|
31734
|
-
case 275 /* ExportDeclaration */:
|
|
31735
|
-
return bindExportDeclaration(node);
|
|
31736
|
-
case 274 /* ExportAssignment */:
|
|
31737
|
-
return bindExportAssignment(node);
|
|
31738
|
-
case 308 /* SourceFile */:
|
|
31739
|
-
updateStrictModeStatementList(node.statements);
|
|
31740
|
-
return bindSourceFileIfExternalModule();
|
|
31741
|
-
case 238 /* Block */:
|
|
31742
|
-
if (!isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
|
|
31743
|
-
return;
|
|
31744
|
-
}
|
|
31745
|
-
case 265 /* ModuleBlock */:
|
|
31746
|
-
return updateStrictModeStatementList(node.statements);
|
|
31747
|
-
case 344 /* JSDocParameterTag */:
|
|
31748
|
-
if (node.parent.kind === 326 /* JSDocSignature */) {
|
|
31749
|
-
return bindParameter(node);
|
|
31750
|
-
}
|
|
31751
|
-
if (node.parent.kind !== 325 /* JSDocTypeLiteral */) {
|
|
31752
|
-
break;
|
|
31753
|
-
}
|
|
31754
|
-
case 351 /* JSDocPropertyTag */:
|
|
31755
|
-
const propTag = node;
|
|
31756
|
-
const flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 319 /* JSDocOptionalType */ ? 4 /* Property */ | 16777216 /* Optional */ : 4 /* Property */;
|
|
31757
|
-
return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
|
|
31758
|
-
case 349 /* JSDocTypedefTag */:
|
|
31759
|
-
case 341 /* JSDocCallbackTag */:
|
|
31760
|
-
case 343 /* JSDocEnumTag */:
|
|
31761
|
-
return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
|
|
31762
|
-
case 342 /* JSDocOverloadTag */:
|
|
31763
|
-
return bind(node.typeExpression);
|
|
31764
|
-
}
|
|
31765
|
-
}
|
|
31766
|
-
function bindPropertyWorker(node) {
|
|
31767
|
-
const isAutoAccessor = isAutoAccessorPropertyDeclaration(node);
|
|
31768
|
-
const includes = isAutoAccessor ? 98304 /* Accessor */ : 4 /* Property */;
|
|
31769
|
-
const excludes = isAutoAccessor ? 13247 /* AccessorExcludes */ : 0 /* PropertyExcludes */;
|
|
31770
|
-
return bindPropertyOrMethodOrAccessor(node, includes | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), excludes);
|
|
31771
|
-
}
|
|
31772
|
-
function bindAnonymousTypeWorker(node) {
|
|
31773
|
-
return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type" /* Type */);
|
|
31774
|
-
}
|
|
31775
|
-
function bindSourceFileIfExternalModule() {
|
|
31776
|
-
setExportContextFlag(file);
|
|
31777
|
-
if (isExternalModule(file)) {
|
|
31778
|
-
bindSourceFileAsExternalModule();
|
|
31779
|
-
} else if (isJsonSourceFile(file)) {
|
|
31780
|
-
bindSourceFileAsExternalModule();
|
|
31781
|
-
const originalSymbol = file.symbol;
|
|
31782
|
-
declareSymbol(file.symbol.exports, file.symbol, file, 4 /* Property */, 67108863 /* All */);
|
|
31783
|
-
file.symbol = originalSymbol;
|
|
31784
|
-
}
|
|
31785
|
-
}
|
|
31786
|
-
function bindSourceFileAsExternalModule() {
|
|
31787
|
-
bindAnonymousDeclaration(file, 512 /* ValueModule */, `"${removeFileExtension(file.fileName)}"`);
|
|
31788
|
-
}
|
|
31789
|
-
function bindExportAssignment(node) {
|
|
31790
|
-
if (!container.symbol || !container.symbol.exports) {
|
|
31791
|
-
bindAnonymousDeclaration(node, 111551 /* Value */, getDeclarationName(node));
|
|
31792
|
-
} else {
|
|
31793
|
-
const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */;
|
|
31794
|
-
const symbol = declareSymbol(container.symbol.exports, container.symbol, node, flags, 67108863 /* All */);
|
|
31795
|
-
if (node.isExportEquals) {
|
|
31796
|
-
setValueDeclaration(symbol, node);
|
|
31797
|
-
}
|
|
31798
|
-
}
|
|
31799
|
-
}
|
|
31800
|
-
function bindNamespaceExportDeclaration(node) {
|
|
31801
|
-
if (some(node.modifiers)) {
|
|
31802
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Modifiers_cannot_appear_here));
|
|
31803
|
-
}
|
|
31804
|
-
const diag2 = !isSourceFile(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_at_top_level : !isExternalModule(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_in_module_files : !node.parent.isDeclarationFile ? Diagnostics.Global_module_exports_may_only_appear_in_declaration_files : void 0;
|
|
31805
|
-
if (diag2) {
|
|
31806
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(node, diag2));
|
|
31807
|
-
} else {
|
|
31808
|
-
file.symbol.globalExports = file.symbol.globalExports || createSymbolTable();
|
|
31809
|
-
declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
|
|
31810
|
-
}
|
|
31811
|
-
}
|
|
31812
|
-
function bindExportDeclaration(node) {
|
|
31813
|
-
if (!container.symbol || !container.symbol.exports) {
|
|
31814
|
-
bindAnonymousDeclaration(node, 8388608 /* ExportStar */, getDeclarationName(node));
|
|
31815
|
-
} else if (!node.exportClause) {
|
|
31816
|
-
declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* ExportStar */, 0 /* None */);
|
|
31817
|
-
} else if (isNamespaceExport(node.exportClause)) {
|
|
31818
|
-
setParent(node.exportClause, node);
|
|
31819
|
-
declareSymbol(container.symbol.exports, container.symbol, node.exportClause, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
|
|
31820
|
-
}
|
|
31821
|
-
}
|
|
31822
|
-
function bindImportClause(node) {
|
|
31823
|
-
if (node.name) {
|
|
31824
|
-
declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
|
|
31825
|
-
}
|
|
31826
|
-
}
|
|
31827
|
-
function setCommonJsModuleIndicator(node) {
|
|
31828
|
-
if (file.externalModuleIndicator && file.externalModuleIndicator !== true) {
|
|
31829
|
-
return false;
|
|
31830
|
-
}
|
|
31831
|
-
if (!file.commonJsModuleIndicator) {
|
|
31832
|
-
file.commonJsModuleIndicator = node;
|
|
31833
|
-
if (!file.externalModuleIndicator) {
|
|
31834
|
-
bindSourceFileAsExternalModule();
|
|
31835
|
-
}
|
|
31836
|
-
}
|
|
31837
|
-
return true;
|
|
31838
|
-
}
|
|
31839
|
-
function bindObjectDefinePropertyExport(node) {
|
|
31840
|
-
if (!setCommonJsModuleIndicator(node)) {
|
|
31841
|
-
return;
|
|
31842
|
-
}
|
|
31843
|
-
const symbol = forEachIdentifierInEntityName(
|
|
31844
|
-
node.arguments[0],
|
|
31845
|
-
/*parent*/
|
|
31846
|
-
void 0,
|
|
31847
|
-
(id, symbol2) => {
|
|
31848
|
-
if (symbol2) {
|
|
31849
|
-
addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */);
|
|
31850
|
-
}
|
|
31851
|
-
return symbol2;
|
|
31852
|
-
}
|
|
31853
|
-
);
|
|
31854
|
-
if (symbol) {
|
|
31855
|
-
const flags = 4 /* Property */ | 1048576 /* ExportValue */;
|
|
31856
|
-
declareSymbol(symbol.exports, symbol, node, flags, 0 /* None */);
|
|
31857
|
-
}
|
|
31858
|
-
}
|
|
31859
|
-
function bindExportsPropertyAssignment(node) {
|
|
31860
|
-
if (!setCommonJsModuleIndicator(node)) {
|
|
31861
|
-
return;
|
|
31862
|
-
}
|
|
31863
|
-
const symbol = forEachIdentifierInEntityName(
|
|
31864
|
-
node.left.expression,
|
|
31865
|
-
/*parent*/
|
|
31866
|
-
void 0,
|
|
31867
|
-
(id, symbol2) => {
|
|
31868
|
-
if (symbol2) {
|
|
31869
|
-
addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */);
|
|
31870
|
-
}
|
|
31871
|
-
return symbol2;
|
|
31872
|
-
}
|
|
31873
|
-
);
|
|
31874
|
-
if (symbol) {
|
|
31875
|
-
const isAlias = isAliasableExpression(node.right) && (isExportsIdentifier(node.left.expression) || isModuleExportsAccessExpression(node.left.expression));
|
|
31876
|
-
const flags = isAlias ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */;
|
|
31877
|
-
setParent(node.left, node);
|
|
31878
|
-
declareSymbol(symbol.exports, symbol, node.left, flags, 0 /* None */);
|
|
31879
|
-
}
|
|
31880
|
-
}
|
|
31881
|
-
function bindModuleExportsAssignment(node) {
|
|
31882
|
-
if (!setCommonJsModuleIndicator(node)) {
|
|
31883
|
-
return;
|
|
31884
|
-
}
|
|
31885
|
-
const assignedExpression = getRightMostAssignedExpression(node.right);
|
|
31886
|
-
if (isEmptyObjectLiteral(assignedExpression) || container === file && isExportsOrModuleExportsOrAlias(file, assignedExpression)) {
|
|
31887
|
-
return;
|
|
31888
|
-
}
|
|
31889
|
-
if (isObjectLiteralExpression(assignedExpression) && every(assignedExpression.properties, isShorthandPropertyAssignment)) {
|
|
31890
|
-
forEach(assignedExpression.properties, bindExportAssignedObjectMemberAlias);
|
|
31891
|
-
return;
|
|
31892
|
-
}
|
|
31893
|
-
const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */ | 512 /* ValueModule */;
|
|
31894
|
-
const symbol = declareSymbol(file.symbol.exports, file.symbol, node, flags | 67108864 /* Assignment */, 0 /* None */);
|
|
31895
|
-
setValueDeclaration(symbol, node);
|
|
31896
|
-
}
|
|
31897
|
-
function bindExportAssignedObjectMemberAlias(node) {
|
|
31898
|
-
declareSymbol(file.symbol.exports, file.symbol, node, 2097152 /* Alias */ | 67108864 /* Assignment */, 0 /* None */);
|
|
31899
|
-
}
|
|
31900
|
-
function bindThisPropertyAssignment(node) {
|
|
31901
|
-
Debug.assert(isInJSFile(node));
|
|
31902
|
-
const hasPrivateIdentifier = isBinaryExpression(node) && isPropertyAccessExpression(node.left) && isPrivateIdentifier(node.left.name) || isPropertyAccessExpression(node) && isPrivateIdentifier(node.name);
|
|
31903
|
-
if (hasPrivateIdentifier) {
|
|
31904
|
-
return;
|
|
31905
|
-
}
|
|
31906
|
-
const thisContainer = getThisContainer(
|
|
31907
|
-
node,
|
|
31908
|
-
/*includeArrowFunctions*/
|
|
31909
|
-
false,
|
|
31910
|
-
/*includeClassComputedPropertyName*/
|
|
31911
|
-
false
|
|
31912
|
-
);
|
|
31913
|
-
switch (thisContainer.kind) {
|
|
31914
|
-
case 259 /* FunctionDeclaration */:
|
|
31915
|
-
case 215 /* FunctionExpression */:
|
|
31916
|
-
let constructorSymbol = thisContainer.symbol;
|
|
31917
|
-
if (isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
|
|
31918
|
-
const l = thisContainer.parent.left;
|
|
31919
|
-
if (isBindableStaticAccessExpression(l) && isPrototypeAccess(l.expression)) {
|
|
31920
|
-
constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
|
|
31921
|
-
}
|
|
31922
|
-
}
|
|
31923
|
-
if (constructorSymbol && constructorSymbol.valueDeclaration) {
|
|
31924
|
-
constructorSymbol.members = constructorSymbol.members || createSymbolTable();
|
|
31925
|
-
if (hasDynamicName(node)) {
|
|
31926
|
-
bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
|
|
31927
|
-
} else {
|
|
31928
|
-
declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
|
|
31929
|
-
}
|
|
31930
|
-
addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
|
|
31931
|
-
}
|
|
31932
|
-
break;
|
|
31933
|
-
case 173 /* Constructor */:
|
|
31934
|
-
case 169 /* PropertyDeclaration */:
|
|
31935
|
-
case 171 /* MethodDeclaration */:
|
|
31936
|
-
case 174 /* GetAccessor */:
|
|
31937
|
-
case 175 /* SetAccessor */:
|
|
31938
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
31939
|
-
const containingClass = thisContainer.parent;
|
|
31940
|
-
const symbolTable = isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
|
|
31941
|
-
if (hasDynamicName(node)) {
|
|
31942
|
-
bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
|
|
31943
|
-
} else {
|
|
31944
|
-
declareSymbol(
|
|
31945
|
-
symbolTable,
|
|
31946
|
-
containingClass.symbol,
|
|
31947
|
-
node,
|
|
31948
|
-
4 /* Property */ | 67108864 /* Assignment */,
|
|
31949
|
-
0 /* None */,
|
|
31950
|
-
/*isReplaceableByMethod*/
|
|
31951
|
-
true
|
|
31952
|
-
);
|
|
31953
|
-
}
|
|
31954
|
-
break;
|
|
31955
|
-
case 308 /* SourceFile */:
|
|
31956
|
-
if (hasDynamicName(node)) {
|
|
31957
|
-
break;
|
|
31958
|
-
} else if (thisContainer.commonJsModuleIndicator) {
|
|
31959
|
-
declareSymbol(thisContainer.symbol.exports, thisContainer.symbol, node, 4 /* Property */ | 1048576 /* ExportValue */, 0 /* None */);
|
|
31960
|
-
} else {
|
|
31961
|
-
declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */);
|
|
31962
|
-
}
|
|
31963
|
-
break;
|
|
31964
|
-
default:
|
|
31965
|
-
Debug.failBadSyntaxKind(thisContainer);
|
|
31966
|
-
}
|
|
31967
|
-
}
|
|
31968
|
-
function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
|
|
31969
|
-
declareSymbol(
|
|
31970
|
-
symbolTable,
|
|
31971
|
-
symbol,
|
|
31972
|
-
node,
|
|
31973
|
-
4 /* Property */,
|
|
31974
|
-
0 /* None */,
|
|
31975
|
-
/*isReplaceableByMethod*/
|
|
31976
|
-
true,
|
|
31977
|
-
/*isComputedName*/
|
|
31978
|
-
true
|
|
31979
|
-
);
|
|
31980
|
-
addLateBoundAssignmentDeclarationToSymbol(node, symbol);
|
|
31981
|
-
}
|
|
31982
|
-
function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
|
|
31983
|
-
if (symbol) {
|
|
31984
|
-
(symbol.assignmentDeclarationMembers || (symbol.assignmentDeclarationMembers = /* @__PURE__ */ new Map())).set(getNodeId(node), node);
|
|
31985
|
-
}
|
|
31986
|
-
}
|
|
31987
|
-
function bindSpecialPropertyDeclaration(node) {
|
|
31988
|
-
if (node.expression.kind === 108 /* ThisKeyword */) {
|
|
31989
|
-
bindThisPropertyAssignment(node);
|
|
31990
|
-
} else if (isBindableStaticAccessExpression(node) && node.parent.parent.kind === 308 /* SourceFile */) {
|
|
31991
|
-
if (isPrototypeAccess(node.expression)) {
|
|
31992
|
-
bindPrototypePropertyAssignment(node, node.parent);
|
|
31993
|
-
} else {
|
|
31994
|
-
bindStaticPropertyAssignment(node);
|
|
31995
|
-
}
|
|
31996
|
-
}
|
|
31997
|
-
}
|
|
31998
|
-
function bindPrototypeAssignment(node) {
|
|
31999
|
-
setParent(node.left, node);
|
|
32000
|
-
setParent(node.right, node);
|
|
32001
|
-
bindPropertyAssignment(
|
|
32002
|
-
node.left.expression,
|
|
32003
|
-
node.left,
|
|
32004
|
-
/*isPrototypeProperty*/
|
|
32005
|
-
false,
|
|
32006
|
-
/*containerIsClass*/
|
|
32007
|
-
true
|
|
32008
|
-
);
|
|
32009
|
-
}
|
|
32010
|
-
function bindObjectDefinePrototypeProperty(node) {
|
|
32011
|
-
const namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0].expression);
|
|
32012
|
-
if (namespaceSymbol && namespaceSymbol.valueDeclaration) {
|
|
32013
|
-
addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */);
|
|
32014
|
-
}
|
|
32015
|
-
bindPotentiallyNewExpandoMemberToNamespace(
|
|
32016
|
-
node,
|
|
32017
|
-
namespaceSymbol,
|
|
32018
|
-
/*isPrototypeProperty*/
|
|
32019
|
-
true
|
|
32020
|
-
);
|
|
32021
|
-
}
|
|
32022
|
-
function bindPrototypePropertyAssignment(lhs, parent2) {
|
|
32023
|
-
const classPrototype = lhs.expression;
|
|
32024
|
-
const constructorFunction = classPrototype.expression;
|
|
32025
|
-
setParent(constructorFunction, classPrototype);
|
|
32026
|
-
setParent(classPrototype, lhs);
|
|
32027
|
-
setParent(lhs, parent2);
|
|
32028
|
-
bindPropertyAssignment(
|
|
32029
|
-
constructorFunction,
|
|
32030
|
-
lhs,
|
|
32031
|
-
/*isPrototypeProperty*/
|
|
32032
|
-
true,
|
|
32033
|
-
/*containerIsClass*/
|
|
32034
|
-
true
|
|
32035
|
-
);
|
|
32036
|
-
}
|
|
32037
|
-
function bindObjectDefinePropertyAssignment(node) {
|
|
32038
|
-
let namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
|
|
32039
|
-
const isToplevel = node.parent.parent.kind === 308 /* SourceFile */;
|
|
32040
|
-
namespaceSymbol = bindPotentiallyMissingNamespaces(
|
|
32041
|
-
namespaceSymbol,
|
|
32042
|
-
node.arguments[0],
|
|
32043
|
-
isToplevel,
|
|
32044
|
-
/*isPrototypeProperty*/
|
|
32045
|
-
false,
|
|
32046
|
-
/*containerIsClass*/
|
|
32047
|
-
false
|
|
32048
|
-
);
|
|
32049
|
-
bindPotentiallyNewExpandoMemberToNamespace(
|
|
32050
|
-
node,
|
|
32051
|
-
namespaceSymbol,
|
|
32052
|
-
/*isPrototypeProperty*/
|
|
32053
|
-
false
|
|
32054
|
-
);
|
|
32055
|
-
}
|
|
32056
|
-
function bindSpecialPropertyAssignment(node) {
|
|
32057
|
-
var _a2;
|
|
32058
|
-
const parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, container) || lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer);
|
|
32059
|
-
if (!isInJSFile(node) && !isFunctionSymbol(parentSymbol)) {
|
|
32060
|
-
return;
|
|
32061
|
-
}
|
|
32062
|
-
const rootExpr = getLeftmostAccessExpression(node.left);
|
|
32063
|
-
if (isIdentifier(rootExpr) && ((_a2 = lookupSymbolForName(container, rootExpr.escapedText)) == null ? void 0 : _a2.flags) & 2097152 /* Alias */) {
|
|
32064
|
-
return;
|
|
32065
|
-
}
|
|
32066
|
-
setParent(node.left, node);
|
|
32067
|
-
setParent(node.right, node);
|
|
32068
|
-
if (isIdentifier(node.left.expression) && container === file && isExportsOrModuleExportsOrAlias(file, node.left.expression)) {
|
|
32069
|
-
bindExportsPropertyAssignment(node);
|
|
32070
|
-
} else if (hasDynamicName(node)) {
|
|
32071
|
-
bindAnonymousDeclaration(node, 4 /* Property */ | 67108864 /* Assignment */, "__computed" /* Computed */);
|
|
32072
|
-
const sym = bindPotentiallyMissingNamespaces(
|
|
32073
|
-
parentSymbol,
|
|
32074
|
-
node.left.expression,
|
|
32075
|
-
isTopLevelNamespaceAssignment(node.left),
|
|
32076
|
-
/*isPrototype*/
|
|
32077
|
-
false,
|
|
32078
|
-
/*containerIsClass*/
|
|
32079
|
-
false
|
|
32080
|
-
);
|
|
32081
|
-
addLateBoundAssignmentDeclarationToSymbol(node, sym);
|
|
32082
|
-
} else {
|
|
32083
|
-
bindStaticPropertyAssignment(cast(node.left, isBindableStaticNameExpression));
|
|
32084
|
-
}
|
|
32085
|
-
}
|
|
32086
|
-
function bindStaticPropertyAssignment(node) {
|
|
32087
|
-
Debug.assert(!isIdentifier(node));
|
|
32088
|
-
setParent(node.expression, node);
|
|
32089
|
-
bindPropertyAssignment(
|
|
32090
|
-
node.expression,
|
|
32091
|
-
node,
|
|
32092
|
-
/*isPrototypeProperty*/
|
|
32093
|
-
false,
|
|
32094
|
-
/*containerIsClass*/
|
|
32095
|
-
false
|
|
32096
|
-
);
|
|
32097
|
-
}
|
|
32098
|
-
function bindPotentiallyMissingNamespaces(namespaceSymbol, entityName, isToplevel, isPrototypeProperty, containerIsClass) {
|
|
32099
|
-
if ((namespaceSymbol == null ? void 0 : namespaceSymbol.flags) & 2097152 /* Alias */) {
|
|
32100
|
-
return namespaceSymbol;
|
|
32101
|
-
}
|
|
32102
|
-
if (isToplevel && !isPrototypeProperty) {
|
|
32103
|
-
const flags = 1536 /* Module */ | 67108864 /* Assignment */;
|
|
32104
|
-
const excludeFlags = 110735 /* ValueModuleExcludes */ & ~67108864 /* Assignment */;
|
|
32105
|
-
namespaceSymbol = forEachIdentifierInEntityName(entityName, namespaceSymbol, (id, symbol, parent2) => {
|
|
32106
|
-
if (symbol) {
|
|
32107
|
-
addDeclarationToSymbol(symbol, id, flags);
|
|
32108
|
-
return symbol;
|
|
32109
|
-
} else {
|
|
32110
|
-
const table = parent2 ? parent2.exports : file.jsGlobalAugmentations || (file.jsGlobalAugmentations = createSymbolTable());
|
|
32111
|
-
return declareSymbol(table, parent2, id, flags, excludeFlags);
|
|
32112
|
-
}
|
|
32113
|
-
});
|
|
32114
|
-
}
|
|
32115
|
-
if (containerIsClass && namespaceSymbol && namespaceSymbol.valueDeclaration) {
|
|
32116
|
-
addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */);
|
|
32117
|
-
}
|
|
32118
|
-
return namespaceSymbol;
|
|
32119
|
-
}
|
|
32120
|
-
function bindPotentiallyNewExpandoMemberToNamespace(declaration, namespaceSymbol, isPrototypeProperty) {
|
|
32121
|
-
if (!namespaceSymbol || !isExpandoSymbol(namespaceSymbol)) {
|
|
32122
|
-
return;
|
|
32123
|
-
}
|
|
32124
|
-
const symbolTable = isPrototypeProperty ? namespaceSymbol.members || (namespaceSymbol.members = createSymbolTable()) : namespaceSymbol.exports || (namespaceSymbol.exports = createSymbolTable());
|
|
32125
|
-
let includes = 0 /* None */;
|
|
32126
|
-
let excludes = 0 /* None */;
|
|
32127
|
-
if (isFunctionLikeDeclaration(getAssignedExpandoInitializer(declaration))) {
|
|
32128
|
-
includes = 8192 /* Method */;
|
|
32129
|
-
excludes = 103359 /* MethodExcludes */;
|
|
32130
|
-
} else if (isCallExpression(declaration) && isBindableObjectDefinePropertyCall(declaration)) {
|
|
32131
|
-
if (some(declaration.arguments[2].properties, (p) => {
|
|
32132
|
-
const id = getNameOfDeclaration(p);
|
|
32133
|
-
return !!id && isIdentifier(id) && idText(id) === "set";
|
|
32134
|
-
})) {
|
|
32135
|
-
includes |= 65536 /* SetAccessor */ | 4 /* Property */;
|
|
32136
|
-
excludes |= 78783 /* SetAccessorExcludes */;
|
|
32137
|
-
}
|
|
32138
|
-
if (some(declaration.arguments[2].properties, (p) => {
|
|
32139
|
-
const id = getNameOfDeclaration(p);
|
|
32140
|
-
return !!id && isIdentifier(id) && idText(id) === "get";
|
|
32141
|
-
})) {
|
|
32142
|
-
includes |= 32768 /* GetAccessor */ | 4 /* Property */;
|
|
32143
|
-
excludes |= 46015 /* GetAccessorExcludes */;
|
|
32144
|
-
}
|
|
32145
|
-
}
|
|
32146
|
-
if (includes === 0 /* None */) {
|
|
32147
|
-
includes = 4 /* Property */;
|
|
32148
|
-
excludes = 0 /* PropertyExcludes */;
|
|
32149
|
-
}
|
|
32150
|
-
declareSymbol(symbolTable, namespaceSymbol, declaration, includes | 67108864 /* Assignment */, excludes & ~67108864 /* Assignment */);
|
|
32151
|
-
}
|
|
32152
|
-
function isTopLevelNamespaceAssignment(propertyAccess) {
|
|
32153
|
-
return isBinaryExpression(propertyAccess.parent) ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 308 /* SourceFile */ : propertyAccess.parent.parent.kind === 308 /* SourceFile */;
|
|
32154
|
-
}
|
|
32155
|
-
function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
|
|
32156
|
-
let namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
|
|
32157
|
-
const isToplevel = isTopLevelNamespaceAssignment(propertyAccess);
|
|
32158
|
-
namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, propertyAccess.expression, isToplevel, isPrototypeProperty, containerIsClass);
|
|
32159
|
-
bindPotentiallyNewExpandoMemberToNamespace(propertyAccess, namespaceSymbol, isPrototypeProperty);
|
|
32160
|
-
}
|
|
32161
|
-
function isExpandoSymbol(symbol) {
|
|
32162
|
-
if (symbol.flags & (16 /* Function */ | 32 /* Class */ | 1024 /* NamespaceModule */)) {
|
|
32163
|
-
return true;
|
|
32164
|
-
}
|
|
32165
|
-
const node = symbol.valueDeclaration;
|
|
32166
|
-
if (node && isCallExpression(node)) {
|
|
32167
|
-
return !!getAssignedExpandoInitializer(node);
|
|
32168
|
-
}
|
|
32169
|
-
let init = !node ? void 0 : isVariableDeclaration(node) ? node.initializer : isBinaryExpression(node) ? node.right : isPropertyAccessExpression(node) && isBinaryExpression(node.parent) ? node.parent.right : void 0;
|
|
32170
|
-
init = init && getRightMostAssignedExpression(init);
|
|
32171
|
-
if (init) {
|
|
32172
|
-
const isPrototypeAssignment = isPrototypeAccess(isVariableDeclaration(node) ? node.name : isBinaryExpression(node) ? node.left : node);
|
|
32173
|
-
return !!getExpandoInitializer(isBinaryExpression(init) && (init.operatorToken.kind === 56 /* BarBarToken */ || init.operatorToken.kind === 60 /* QuestionQuestionToken */) ? init.right : init, isPrototypeAssignment);
|
|
32174
|
-
}
|
|
32175
|
-
return false;
|
|
32176
|
-
}
|
|
32177
|
-
function getParentOfBinaryExpression(expr) {
|
|
32178
|
-
while (isBinaryExpression(expr.parent)) {
|
|
32179
|
-
expr = expr.parent;
|
|
32180
|
-
}
|
|
32181
|
-
return expr.parent;
|
|
32182
|
-
}
|
|
32183
|
-
function lookupSymbolForPropertyAccess(node, lookupContainer = container) {
|
|
32184
|
-
if (isIdentifier(node)) {
|
|
32185
|
-
return lookupSymbolForName(lookupContainer, node.escapedText);
|
|
32186
|
-
} else {
|
|
32187
|
-
const symbol = lookupSymbolForPropertyAccess(node.expression);
|
|
32188
|
-
return symbol && symbol.exports && symbol.exports.get(getElementOrPropertyAccessName(node));
|
|
32189
|
-
}
|
|
32190
|
-
}
|
|
32191
|
-
function forEachIdentifierInEntityName(e, parent2, action) {
|
|
32192
|
-
if (isExportsOrModuleExportsOrAlias(file, e)) {
|
|
32193
|
-
return file.symbol;
|
|
32194
|
-
} else if (isIdentifier(e)) {
|
|
32195
|
-
return action(e, lookupSymbolForPropertyAccess(e), parent2);
|
|
32196
|
-
} else {
|
|
32197
|
-
const s = forEachIdentifierInEntityName(e.expression, parent2, action);
|
|
32198
|
-
const name = getNameOrArgument(e);
|
|
32199
|
-
if (isPrivateIdentifier(name)) {
|
|
32200
|
-
Debug.fail("unexpected PrivateIdentifier");
|
|
32201
|
-
}
|
|
32202
|
-
return action(name, s && s.exports && s.exports.get(getElementOrPropertyAccessName(e)), s);
|
|
32203
|
-
}
|
|
32204
|
-
}
|
|
32205
|
-
function bindCallExpression(node) {
|
|
32206
|
-
if (!file.commonJsModuleIndicator && isRequireCall(
|
|
32207
|
-
node,
|
|
32208
|
-
/*checkArgumentIsStringLiteralLike*/
|
|
32209
|
-
false
|
|
32210
|
-
)) {
|
|
32211
|
-
setCommonJsModuleIndicator(node);
|
|
32212
|
-
}
|
|
32213
|
-
}
|
|
32214
|
-
function bindClassLikeDeclaration(node) {
|
|
32215
|
-
if (node.kind === 260 /* ClassDeclaration */) {
|
|
32216
|
-
bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
|
|
32217
|
-
} else {
|
|
32218
|
-
const bindingName = node.name ? node.name.escapedText : "__class" /* Class */;
|
|
32219
|
-
bindAnonymousDeclaration(node, 32 /* Class */, bindingName);
|
|
32220
|
-
if (node.name) {
|
|
32221
|
-
classifiableNames.add(node.name.escapedText);
|
|
32222
|
-
}
|
|
32223
|
-
}
|
|
32224
|
-
const { symbol } = node;
|
|
32225
|
-
const prototypeSymbol = createSymbol(4 /* Property */ | 4194304 /* Prototype */, "prototype");
|
|
32226
|
-
const symbolExport = symbol.exports.get(prototypeSymbol.escapedName);
|
|
32227
|
-
if (symbolExport) {
|
|
32228
|
-
if (node.name) {
|
|
32229
|
-
setParent(node.name, node);
|
|
32230
|
-
}
|
|
32231
|
-
file.bindDiagnostics.push(createDiagnosticForNode2(symbolExport.declarations[0], Diagnostics.Duplicate_identifier_0, symbolName(prototypeSymbol)));
|
|
32232
|
-
}
|
|
32233
|
-
symbol.exports.set(prototypeSymbol.escapedName, prototypeSymbol);
|
|
32234
|
-
prototypeSymbol.parent = symbol;
|
|
32235
|
-
}
|
|
32236
|
-
function bindEnumDeclaration(node) {
|
|
32237
|
-
return isEnumConst(node) ? bindBlockScopedDeclaration(node, 128 /* ConstEnum */, 899967 /* ConstEnumExcludes */) : bindBlockScopedDeclaration(node, 256 /* RegularEnum */, 899327 /* RegularEnumExcludes */);
|
|
32238
|
-
}
|
|
32239
|
-
function bindVariableDeclarationOrBindingElement(node) {
|
|
32240
|
-
if (inStrictMode) {
|
|
32241
|
-
checkStrictModeEvalOrArguments(node, node.name);
|
|
32242
|
-
}
|
|
32243
|
-
if (!isBindingPattern(node.name)) {
|
|
32244
|
-
const possibleVariableDecl = node.kind === 257 /* VariableDeclaration */ ? node : node.parent.parent;
|
|
32245
|
-
if (isInJSFile(node) && getEmitModuleResolutionKind(options) !== 100 /* Bundler */ && isVariableDeclarationInitializedToBareOrAccessedRequire(possibleVariableDecl) && !getJSDocTypeTag(node) && !(getCombinedModifierFlags(node) & 1 /* Export */)) {
|
|
32246
|
-
declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
|
|
32247
|
-
} else if (isBlockOrCatchScoped(node)) {
|
|
32248
|
-
bindBlockScopedDeclaration(node, 2 /* BlockScopedVariable */, 111551 /* BlockScopedVariableExcludes */);
|
|
32249
|
-
} else if (isParameterDeclaration(node)) {
|
|
32250
|
-
declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */);
|
|
32251
|
-
} else {
|
|
32252
|
-
declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */);
|
|
32253
|
-
}
|
|
32254
|
-
}
|
|
32255
|
-
}
|
|
32256
|
-
function bindParameter(node) {
|
|
32257
|
-
if (node.kind === 344 /* JSDocParameterTag */ && container.kind !== 326 /* JSDocSignature */) {
|
|
32258
|
-
return;
|
|
32259
|
-
}
|
|
32260
|
-
if (inStrictMode && !(node.flags & 16777216 /* Ambient */)) {
|
|
32261
|
-
checkStrictModeEvalOrArguments(node, node.name);
|
|
32262
|
-
}
|
|
32263
|
-
if (isBindingPattern(node.name)) {
|
|
32264
|
-
bindAnonymousDeclaration(node, 1 /* FunctionScopedVariable */, "__" + node.parent.parameters.indexOf(node));
|
|
32265
|
-
} else {
|
|
32266
|
-
declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */);
|
|
32267
|
-
}
|
|
32268
|
-
if (isParameterPropertyDeclaration(node, node.parent)) {
|
|
32269
|
-
const classDeclaration = node.parent.parent;
|
|
32270
|
-
declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 /* Property */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */);
|
|
32271
|
-
}
|
|
32272
|
-
}
|
|
32273
|
-
function bindFunctionDeclaration(node) {
|
|
32274
|
-
if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */)) {
|
|
32275
|
-
if (isAsyncFunction(node)) {
|
|
32276
|
-
emitFlags |= 2048 /* HasAsyncFunctions */;
|
|
32277
|
-
}
|
|
32278
|
-
}
|
|
32279
|
-
checkStrictModeFunctionName(node);
|
|
32280
|
-
if (inStrictMode) {
|
|
32281
|
-
checkStrictModeFunctionDeclaration(node);
|
|
32282
|
-
bindBlockScopedDeclaration(node, 16 /* Function */, 110991 /* FunctionExcludes */);
|
|
32283
|
-
} else {
|
|
32284
|
-
declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 110991 /* FunctionExcludes */);
|
|
32285
|
-
}
|
|
32286
|
-
}
|
|
32287
|
-
function bindFunctionExpression(node) {
|
|
32288
|
-
if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */)) {
|
|
32289
|
-
if (isAsyncFunction(node)) {
|
|
32290
|
-
emitFlags |= 2048 /* HasAsyncFunctions */;
|
|
32291
|
-
}
|
|
32292
|
-
}
|
|
32293
|
-
if (currentFlow) {
|
|
32294
|
-
node.flowNode = currentFlow;
|
|
32295
|
-
}
|
|
32296
|
-
checkStrictModeFunctionName(node);
|
|
32297
|
-
const bindingName = node.name ? node.name.escapedText : "__function" /* Function */;
|
|
32298
|
-
return bindAnonymousDeclaration(node, 16 /* Function */, bindingName);
|
|
32299
|
-
}
|
|
32300
|
-
function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) {
|
|
32301
|
-
if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */) && isAsyncFunction(node)) {
|
|
32302
|
-
emitFlags |= 2048 /* HasAsyncFunctions */;
|
|
32303
|
-
}
|
|
32304
|
-
if (currentFlow && isObjectLiteralOrClassExpressionMethodOrAccessor(node)) {
|
|
32305
|
-
node.flowNode = currentFlow;
|
|
32306
|
-
}
|
|
32307
|
-
return hasDynamicName(node) ? bindAnonymousDeclaration(node, symbolFlags, "__computed" /* Computed */) : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
|
|
32308
|
-
}
|
|
32309
|
-
function getInferTypeContainer(node) {
|
|
32310
|
-
const extendsType = findAncestor(node, (n) => n.parent && isConditionalTypeNode(n.parent) && n.parent.extendsType === n);
|
|
32311
|
-
return extendsType && extendsType.parent;
|
|
32312
|
-
}
|
|
32313
|
-
function bindTypeParameter(node) {
|
|
32314
|
-
var _a2, _b;
|
|
32315
|
-
if (isJSDocTemplateTag(node.parent)) {
|
|
32316
|
-
const container2 = getEffectiveContainerForJSDocTemplateTag(node.parent);
|
|
32317
|
-
if (container2) {
|
|
32318
|
-
Debug.assertNode(container2, canHaveLocals);
|
|
32319
|
-
(_a2 = container2.locals) != null ? _a2 : container2.locals = createSymbolTable();
|
|
32320
|
-
declareSymbol(
|
|
32321
|
-
container2.locals,
|
|
32322
|
-
/*parent*/
|
|
32323
|
-
void 0,
|
|
32324
|
-
node,
|
|
32325
|
-
262144 /* TypeParameter */,
|
|
32326
|
-
526824 /* TypeParameterExcludes */
|
|
32327
|
-
);
|
|
32328
|
-
} else {
|
|
32329
|
-
declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
|
|
32330
|
-
}
|
|
32331
|
-
} else if (node.parent.kind === 192 /* InferType */) {
|
|
32332
|
-
const container2 = getInferTypeContainer(node.parent);
|
|
32333
|
-
if (container2) {
|
|
32334
|
-
Debug.assertNode(container2, canHaveLocals);
|
|
32335
|
-
(_b = container2.locals) != null ? _b : container2.locals = createSymbolTable();
|
|
32336
|
-
declareSymbol(
|
|
32337
|
-
container2.locals,
|
|
32338
|
-
/*parent*/
|
|
32339
|
-
void 0,
|
|
32340
|
-
node,
|
|
32341
|
-
262144 /* TypeParameter */,
|
|
32342
|
-
526824 /* TypeParameterExcludes */
|
|
32343
|
-
);
|
|
32344
|
-
} else {
|
|
32345
|
-
bindAnonymousDeclaration(node, 262144 /* TypeParameter */, getDeclarationName(node));
|
|
32346
|
-
}
|
|
32347
|
-
} else {
|
|
32348
|
-
declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
|
|
32349
|
-
}
|
|
32350
|
-
}
|
|
32351
|
-
function shouldReportErrorOnModuleDeclaration(node) {
|
|
32352
|
-
const instanceState = getModuleInstanceState(node);
|
|
32353
|
-
return instanceState === 1 /* Instantiated */ || instanceState === 2 /* ConstEnumOnly */ && shouldPreserveConstEnums(options);
|
|
32354
|
-
}
|
|
32355
|
-
function checkUnreachable(node) {
|
|
32356
|
-
if (!(currentFlow.flags & 1 /* Unreachable */)) {
|
|
32357
|
-
return false;
|
|
32358
|
-
}
|
|
32359
|
-
if (currentFlow === unreachableFlow) {
|
|
32360
|
-
const reportError = (
|
|
32361
|
-
// report error on all statements except empty ones
|
|
32362
|
-
isStatementButNotDeclaration(node) && node.kind !== 239 /* EmptyStatement */ || // report error on class declarations
|
|
32363
|
-
node.kind === 260 /* ClassDeclaration */ || // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
|
|
32364
|
-
node.kind === 264 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)
|
|
32365
|
-
);
|
|
32366
|
-
if (reportError) {
|
|
32367
|
-
currentFlow = reportedUnreachableFlow;
|
|
32368
|
-
if (!options.allowUnreachableCode) {
|
|
32369
|
-
const isError = unreachableCodeIsError(options) && !(node.flags & 16777216 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 3 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer));
|
|
32370
|
-
eachUnreachableRange(node, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected));
|
|
32371
|
-
}
|
|
32372
|
-
}
|
|
32373
|
-
}
|
|
32374
|
-
return true;
|
|
32375
|
-
}
|
|
32376
|
-
}
|
|
32377
|
-
function eachUnreachableRange(node, cb) {
|
|
32378
|
-
if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) {
|
|
32379
|
-
const { statements } = node.parent;
|
|
32380
|
-
const slice = sliceAfter(statements, node);
|
|
32381
|
-
getRangesWhere(slice, isExecutableStatement, (start, afterEnd) => cb(slice[start], slice[afterEnd - 1]));
|
|
32382
|
-
} else {
|
|
32383
|
-
cb(node, node);
|
|
32384
|
-
}
|
|
32385
|
-
}
|
|
32386
|
-
function isExecutableStatement(s) {
|
|
32387
|
-
return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !isEnumDeclaration(s) && // `var x;` may declare a variable used above
|
|
32388
|
-
!(isVariableStatement(s) && !(getCombinedNodeFlags(s) & (1 /* Let */ | 2 /* Const */)) && s.declarationList.declarations.some((d) => !d.initializer));
|
|
32389
|
-
}
|
|
32390
|
-
function isPurelyTypeDeclaration(s) {
|
|
32391
|
-
switch (s.kind) {
|
|
32392
|
-
case 261 /* InterfaceDeclaration */:
|
|
32393
|
-
case 262 /* TypeAliasDeclaration */:
|
|
32394
|
-
return true;
|
|
32395
|
-
case 264 /* ModuleDeclaration */:
|
|
32396
|
-
return getModuleInstanceState(s) !== 1 /* Instantiated */;
|
|
32397
|
-
case 263 /* EnumDeclaration */:
|
|
32398
|
-
return hasSyntacticModifier(s, 2048 /* Const */);
|
|
32399
|
-
default:
|
|
32400
|
-
return false;
|
|
32401
|
-
}
|
|
32402
|
-
}
|
|
32403
|
-
function isExportsOrModuleExportsOrAlias(sourceFile, node) {
|
|
32404
|
-
let i = 0;
|
|
32405
|
-
const q = createQueue();
|
|
32406
|
-
q.enqueue(node);
|
|
32407
|
-
while (!q.isEmpty() && i < 100) {
|
|
32408
|
-
i++;
|
|
32409
|
-
node = q.dequeue();
|
|
32410
|
-
if (isExportsIdentifier(node) || isModuleExportsAccessExpression(node)) {
|
|
32411
|
-
return true;
|
|
32412
|
-
} else if (isIdentifier(node)) {
|
|
32413
|
-
const symbol = lookupSymbolForName(sourceFile, node.escapedText);
|
|
32414
|
-
if (!!symbol && !!symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration) && !!symbol.valueDeclaration.initializer) {
|
|
32415
|
-
const init = symbol.valueDeclaration.initializer;
|
|
32416
|
-
q.enqueue(init);
|
|
32417
|
-
if (isAssignmentExpression(
|
|
32418
|
-
init,
|
|
32419
|
-
/*excludeCompoundAssignment*/
|
|
32420
|
-
true
|
|
32421
|
-
)) {
|
|
32422
|
-
q.enqueue(init.left);
|
|
32423
|
-
q.enqueue(init.right);
|
|
32424
|
-
}
|
|
32425
|
-
}
|
|
32426
|
-
}
|
|
32427
|
-
}
|
|
32428
|
-
return false;
|
|
32429
|
-
}
|
|
32430
|
-
function getContainerFlags(node) {
|
|
32431
|
-
switch (node.kind) {
|
|
32432
|
-
case 228 /* ClassExpression */:
|
|
32433
|
-
case 260 /* ClassDeclaration */:
|
|
32434
|
-
case 263 /* EnumDeclaration */:
|
|
32435
|
-
case 207 /* ObjectLiteralExpression */:
|
|
32436
|
-
case 184 /* TypeLiteral */:
|
|
32437
|
-
case 325 /* JSDocTypeLiteral */:
|
|
32438
|
-
case 289 /* JsxAttributes */:
|
|
32439
|
-
return 1 /* IsContainer */;
|
|
32440
|
-
case 261 /* InterfaceDeclaration */:
|
|
32441
|
-
return 1 /* IsContainer */ | 64 /* IsInterface */;
|
|
32442
|
-
case 264 /* ModuleDeclaration */:
|
|
32443
|
-
case 262 /* TypeAliasDeclaration */:
|
|
32444
|
-
case 197 /* MappedType */:
|
|
32445
|
-
case 178 /* IndexSignature */:
|
|
32446
|
-
return 1 /* IsContainer */ | 32 /* HasLocals */;
|
|
32447
|
-
case 308 /* SourceFile */:
|
|
32448
|
-
return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
|
|
32449
|
-
case 174 /* GetAccessor */:
|
|
32450
|
-
case 175 /* SetAccessor */:
|
|
32451
|
-
case 171 /* MethodDeclaration */:
|
|
32452
|
-
if (isObjectLiteralOrClassExpressionMethodOrAccessor(node)) {
|
|
32453
|
-
return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */;
|
|
32454
|
-
}
|
|
32455
|
-
case 173 /* Constructor */:
|
|
32456
|
-
case 259 /* FunctionDeclaration */:
|
|
32457
|
-
case 170 /* MethodSignature */:
|
|
32458
|
-
case 176 /* CallSignature */:
|
|
32459
|
-
case 326 /* JSDocSignature */:
|
|
32460
|
-
case 320 /* JSDocFunctionType */:
|
|
32461
|
-
case 181 /* FunctionType */:
|
|
32462
|
-
case 177 /* ConstructSignature */:
|
|
32463
|
-
case 182 /* ConstructorType */:
|
|
32464
|
-
case 172 /* ClassStaticBlockDeclaration */:
|
|
32465
|
-
return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
|
|
32466
|
-
case 215 /* FunctionExpression */:
|
|
32467
|
-
case 216 /* ArrowFunction */:
|
|
32468
|
-
return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
|
|
32469
|
-
case 265 /* ModuleBlock */:
|
|
32470
|
-
return 4 /* IsControlFlowContainer */;
|
|
32471
|
-
case 169 /* PropertyDeclaration */:
|
|
32472
|
-
return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
|
|
32473
|
-
case 295 /* CatchClause */:
|
|
32474
|
-
case 245 /* ForStatement */:
|
|
32475
|
-
case 246 /* ForInStatement */:
|
|
32476
|
-
case 247 /* ForOfStatement */:
|
|
32477
|
-
case 266 /* CaseBlock */:
|
|
32478
|
-
return 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */;
|
|
32479
|
-
case 238 /* Block */:
|
|
32480
|
-
return isFunctionLike(node.parent) || isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */;
|
|
32481
|
-
}
|
|
32482
|
-
return 0 /* None */;
|
|
32483
|
-
}
|
|
32484
|
-
function lookupSymbolForName(container, name) {
|
|
32485
|
-
var _a2, _b, _c, _d, _e;
|
|
32486
|
-
const local = (_b = (_a2 = tryCast(container, canHaveLocals)) == null ? void 0 : _a2.locals) == null ? void 0 : _b.get(name);
|
|
32487
|
-
if (local) {
|
|
32488
|
-
return (_c = local.exportSymbol) != null ? _c : local;
|
|
32489
|
-
}
|
|
32490
|
-
if (isSourceFile(container) && container.jsGlobalAugmentations && container.jsGlobalAugmentations.has(name)) {
|
|
32491
|
-
return container.jsGlobalAugmentations.get(name);
|
|
32492
|
-
}
|
|
32493
|
-
if (canHaveSymbol(container)) {
|
|
32494
|
-
return (_e = (_d = container.symbol) == null ? void 0 : _d.exports) == null ? void 0 : _e.get(name);
|
|
32495
|
-
}
|
|
32496
|
-
}
|
|
32497
|
-
|
|
32498
28829
|
// src/compiler/checker.ts
|
|
32499
|
-
var nextSymbolId = 1;
|
|
32500
28830
|
var nextNodeId = 1;
|
|
32501
28831
|
var TypeFacts = /* @__PURE__ */ ((TypeFacts3) => {
|
|
32502
28832
|
TypeFacts3[TypeFacts3["None"] = 0] = "None";
|
|
@@ -32622,13 +28952,6 @@ function getNodeId(node) {
|
|
|
32622
28952
|
}
|
|
32623
28953
|
return node.id;
|
|
32624
28954
|
}
|
|
32625
|
-
function getSymbolId(symbol) {
|
|
32626
|
-
if (!symbol.id) {
|
|
32627
|
-
symbol.id = nextSymbolId;
|
|
32628
|
-
nextSymbolId++;
|
|
32629
|
-
}
|
|
32630
|
-
return symbol.id;
|
|
32631
|
-
}
|
|
32632
28955
|
function isNotAccessor(declaration) {
|
|
32633
28956
|
return !isAccessor(declaration);
|
|
32634
28957
|
}
|