@zzzen/pyright-internal 1.2.0-dev.20230813 → 1.2.0-dev.20230827
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/dist/analyzer/binder.js +8 -2
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -0
- package/dist/analyzer/checker.js +123 -70
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +23 -1
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +2 -1
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +1 -1
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/dataClasses.js +242 -236
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/decorators.js +11 -6
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/deprecatedSymbols.d.ts +9 -0
- package/dist/analyzer/deprecatedSymbols.js +292 -0
- package/dist/analyzer/deprecatedSymbols.js.map +1 -0
- package/dist/analyzer/docStringConversion.js +7 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/enums.js +12 -0
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.js +8 -1
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/namedTuples.js +6 -0
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +1 -1
- package/dist/analyzer/operations.js +2 -2
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/parameterUtils.d.ts +2 -1
- package/dist/analyzer/parameterUtils.js +15 -0
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/program.d.ts +3 -3
- package/dist/analyzer/program.js +5 -9
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -0
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.js +2 -2
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +1 -0
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +713 -529
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
- package/dist/analyzer/typeEvaluatorTypes.js +2 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +18 -4
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +3 -0
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +3 -2
- package/dist/analyzer/typeUtils.js +30 -7
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +3 -1
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/types.d.ts +6 -1
- package/dist/analyzer/types.js +20 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +2 -1
- package/dist/common/cancellationUtils.js +3 -0
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +5 -1
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/diagnosticRules.d.ts +1 -0
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/serviceProvider.d.ts +4 -3
- package/dist/languageServerBase.d.ts +2 -2
- package/dist/languageServerBase.js +4 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/completionProvider.js +9 -3
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +25 -4
- package/dist/localization/localize.js +8 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +15 -12
- package/dist/localization/package.nls.de.json +15 -12
- package/dist/localization/package.nls.en-us.json +18 -12
- package/dist/localization/package.nls.es.json +15 -12
- package/dist/localization/package.nls.fr.json +15 -12
- package/dist/localization/package.nls.it.json +15 -12
- package/dist/localization/package.nls.ja.json +15 -12
- package/dist/localization/package.nls.ko.json +15 -12
- package/dist/localization/package.nls.pl.json +15 -12
- package/dist/localization/package.nls.pt-br.json +15 -12
- package/dist/localization/package.nls.qps-ploc.json +15 -12
- package/dist/localization/package.nls.ru.json +15 -12
- package/dist/localization/package.nls.tr.json +15 -12
- package/dist/localization/package.nls.zh-cn.json +15 -12
- package/dist/localization/package.nls.zh-tw.json +14 -11
- package/dist/parser/parser.d.ts +1 -0
- package/dist/parser/parser.js +80 -18
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +1 -1
- package/dist/parser/tokenizer.js +9 -5
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/checker.test.js +34 -13
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +39 -2
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +23 -0
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +1 -1
- package/dist/tests/harness/fourslash/testState.js +2 -2
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +8 -4
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +13 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +21 -23
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +21 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +33 -1
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +1 -1
- package/dist/workspaceFactory.js +3 -3
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
@@ -78,7 +78,7 @@
|
|
78
78
|
"comparisonAlwaysTrue": "條件一律會評估為 True,因為類型 \"{leftType}\" 和 \"{rightType}\" 沒有重疊",
|
79
79
|
"comprehensionInDict": "理解不能與其他字典項目搭配使用",
|
80
80
|
"comprehensionInSet": "Comprehension 無法與其他集合輸入項目一起使用",
|
81
|
-
"concatenateParamSpecMissing": "\"Concatenate\"
|
81
|
+
"concatenateParamSpecMissing": "Last type argument for \"Concatenate\" must be a ParamSpec or \"...\"",
|
82
82
|
"concatenateTypeArgsMissing": "\"Concatenate\" 至少需要兩個型別引數",
|
83
83
|
"conditionalOperandInvalid": "型別 \"{type}\" 的條件運算元無效",
|
84
84
|
"constantRedefinition": "\"{name}\" 是常數 (因為它是大寫) 且無法重新定義",
|
@@ -130,8 +130,8 @@
|
|
130
130
|
"duplicateStarPattern": "模式序列中僅允許一個 \"*\" 模式",
|
131
131
|
"duplicateStarStarPattern": "僅允許輸入一個 \"**\"",
|
132
132
|
"duplicateUnpack": "清單中僅允許一個解除封裝作業",
|
133
|
-
"ellipsisContext": "
|
134
|
-
"ellipsisSecondArg": "\"...\"
|
133
|
+
"ellipsisContext": "\"...\" is not allowed in this context",
|
134
|
+
"ellipsisSecondArg": "\"...\" is allowed only as the second of two arguments",
|
135
135
|
"enumClassOverride": "列舉類別 \"{name}\" 為 Final,且不能設為子類別",
|
136
136
|
"exceptionGroupIncompatible": "例外群組語法 (\"except*\") 需要 Python 3.11 或更新版本",
|
137
137
|
"exceptionTypeIncorrect": "\"{type}\" 不是衍生自 BaseException",
|
@@ -185,7 +185,7 @@
|
|
185
185
|
"expectedTypeParameterName": "應為型別參數名稱",
|
186
186
|
"expectedYieldExpr": "yield 陳述式中應有運算式",
|
187
187
|
"finalClassIsAbstract": "類別 \"{type}\" 標示為 Final,且必須實作所有抽象方法",
|
188
|
-
"finalContext": "
|
188
|
+
"finalContext": "\"Final\" is not allowed in this context",
|
189
189
|
"finalMethodOverride": "方法 \"{name}\" 不能覆寫類別 \"{className}\" 中定義的 Final 方法",
|
190
190
|
"finalReassigned": "\"{name}\" 已宣告為 Final,因此無法重新指派",
|
191
191
|
"finalRedeclaration": "\"{name}\" 先前已宣告為 Final",
|
@@ -335,7 +335,7 @@
|
|
335
335
|
"paramSpecArgsMissing": "ParamSpec \"{type}\" 的引數遺失",
|
336
336
|
"paramSpecArgsUsage": "只有搭配 *args 參數使用時,ParamSpec 的 \"args\" 成員才有效",
|
337
337
|
"paramSpecAssignedName": "ParamSpec 必須指派至名為 \"{name}\" 的變數",
|
338
|
-
"paramSpecContext": "
|
338
|
+
"paramSpecContext": "ParamSpec is not allowed in this context",
|
339
339
|
"paramSpecDefaultNotTuple": "ParamSpec 的預設值必須是省略符號、元組運算式或 ParamSpec",
|
340
340
|
"paramSpecFirstArg": "應以 ParamSpec 的名稱作為第一個引數",
|
341
341
|
"paramSpecKwargsUsage": "ParamSpec 的 \"kwargs\" 成員只有在與 **kwargs 參數搭配使用時有效",
|
@@ -383,7 +383,7 @@
|
|
383
383
|
"requiredArgCount": "\"Required\" 後面應有單一型別引數",
|
384
384
|
"requiredNotInTypedDict": "此內容中不允許 \"Required\"",
|
385
385
|
"returnInAsyncGenerator": "非同步產生器中不允許具有值的 return 陳述式",
|
386
|
-
"returnMissing": "
|
386
|
+
"returnMissing": "宣告類型為 \"{returnType}\" 的函式必須在所有程式碼路徑上傳回值",
|
387
387
|
"returnOutsideFunction": "\"return\" 只能在函式內使用",
|
388
388
|
"returnTypeContravariant": "逆變數型別變數不能用在傳回型別中",
|
389
389
|
"returnTypeMismatch": "類型 \"{exprType}\" 的運算式不能指派至傳回類型 \"{returnType}\"",
|
@@ -429,6 +429,7 @@
|
|
429
429
|
"tupleIndexOutOfRange": "索引 {index} 超過類型 {type} 的範圍",
|
430
430
|
"typeAliasIllegalExpressionForm": "類型別名定義無效的運算式格式",
|
431
431
|
"typeAliasIsRecursiveDirect": "型別別名 \"{name}\" 無法在其定義中使用它自己",
|
432
|
+
"typeAliasNotAllowed": "類型別名 \"{name}\" 無法在此內容中使用",
|
432
433
|
"typeAliasNotInModuleOrClass": "TypeAlias 只能在模組或類別範圍內定義",
|
433
434
|
"typeAliasRedeclared": "\"{name}\" 宣告為 TypeAlias,且只能指派一次",
|
434
435
|
"typeAliasStatementIllegal": "類型別名陳述式需要 Python 3.12 或更新版本",
|
@@ -448,6 +449,7 @@
|
|
448
449
|
"typeArgsTooFew": "為 \"{name}\" 提供太少類型引數; 預期為 {expected} 但收到 {received}",
|
449
450
|
"typeArgsTooMany": "已為 \"{name}\" 提供太多型別引數; 應為 {expected} 但收到 {received}",
|
450
451
|
"typeAssignmentMismatch": "類型 \"{sourceType}\" 的運算式不能指派至宣告的類型 \"{destType}\"",
|
452
|
+
"typeAssignmentMismatchWildcard": "Import symbol \"{name}\" has type \"{sourceType}\", which cannot be assigned to declared type \"{destType}\"",
|
451
453
|
"typeCallNotAllowed": "不應在類型註釋中使用 type() 呼叫",
|
452
454
|
"typeCommentDeprecated": "使用類型註解已取代; 請改為使用類型註釋",
|
453
455
|
"typeExpectedClass": "預期為類型運算式,但收到 \"{type}\"",
|
@@ -487,7 +489,7 @@
|
|
487
489
|
"typeVarPossiblyUnsolvable": "如果呼叫者未提供參數 \"{param}\" 的引數,則型別變數 \"{name}\" 可能無法解析",
|
488
490
|
"typeVarScopedToReturnType": "型別變數 \"{name}\" 的範圍為傳回型別內的可呼叫項目,無法在函式主體中參考",
|
489
491
|
"typeVarSingleConstraint": "TypeVar 至少必須有兩個限制類型",
|
490
|
-
"typeVarTupleContext": "
|
492
|
+
"typeVarTupleContext": "TypeVarTuple is not allowed in this context",
|
491
493
|
"typeVarTupleDefaultNotUnpacked": "TypeVarTuple 預設型別必須是未封裝的元組或 TypeVarTuple",
|
492
494
|
"typeVarTupleMustBeUnpacked": "TypeVarTuple 值需要解除封裝運算子",
|
493
495
|
"typeVarTupleUnknownParam": "\"{name}\" 是 TypeVarTuple 的未知參數",
|
@@ -544,8 +546,8 @@
|
|
544
546
|
"unpackInAnnotation": "類型註釋中不允許解壓縮運算子",
|
545
547
|
"unpackInDict": "字典中不允許解壓縮作業",
|
546
548
|
"unpackInSet": "集合內不允許將運算子解除封裝",
|
547
|
-
"unpackNotAllowed": "
|
548
|
-
"unpackOperatorNotAllowed": "
|
549
|
+
"unpackNotAllowed": "Unpack is not allowed in this context",
|
550
|
+
"unpackOperatorNotAllowed": "Unpack operation is not allowed in this context",
|
549
551
|
"unpackTuplesIllegal": "Python 3.8 之前的 Tuple 中不允許解壓縮作業",
|
550
552
|
"unpackedArgInTypeArgument": "解壓縮的引數不能用於類型引數清單",
|
551
553
|
"unpackedArgWithVariadicParam": "未封裝的引數無法用於 TypeVarTuple 參數",
|
@@ -566,7 +568,7 @@
|
|
566
568
|
"variadicTypeParamTooManyAlias": "類型別名最多只能有一個 TypeVarTuple 類型參數,但收到多個 ({names})",
|
567
569
|
"variadicTypeParamTooManyClass": "一般類別最多只能有一個 TypeVarTuple 類型參數,但收到多個 ({names})",
|
568
570
|
"walrusIllegal": "運算子 \":=\" 需要 Python 3.8 或更新版本",
|
569
|
-
"walrusNotAllowed": "
|
571
|
+
"walrusNotAllowed": "Operator \":=\" is not allowed in this context without surrounding parentheses",
|
570
572
|
"wildcardInFunction": "類別或函式內不允許萬用字元匯入",
|
571
573
|
"wildcardLibraryImport": "不允許從程式庫匯入萬用字元",
|
572
574
|
"wildcardPatternTypePartiallyUnknown": "萬用字元模式擷取的類型部分未知",
|
@@ -576,7 +578,7 @@
|
|
576
578
|
"yieldOutsideFunction": "在函式或 lambda 外部不允許 \"yield\"",
|
577
579
|
"yieldWithinListCompr": "清單理解內不允許 \"yield\"",
|
578
580
|
"zeroCaseStatementsFound": "Match 陳述式必須至少包含一個 case 陳述式",
|
579
|
-
"zeroLengthTupleNotAllowed": "
|
581
|
+
"zeroLengthTupleNotAllowed": "Zero-length tuple is not allowed in this context"
|
580
582
|
},
|
581
583
|
"DiagnosticAddendum": {
|
582
584
|
"argParam": "引數對應至參數 \"{paramName}\"",
|
@@ -619,6 +621,7 @@
|
|
619
621
|
"memberIsInitVar": "成員 \"{name}\" 是僅限初始化的欄位",
|
620
622
|
"memberIsInvariant": "\"{name}\" 為不變數,因為它可變動",
|
621
623
|
"memberIsNotFinalInProtocol": "\"{name}\" 未在通訊協定中標示為 Final",
|
624
|
+
"memberIsWritableInProtocol": "\"{name}\" is writable in protocol",
|
622
625
|
"memberSetClassVar": "無法透過類別執行個體指派成員 \"{name}\",因為它是 ClassVar",
|
623
626
|
"memberTypeMismatch": "\"{name}\" 是不相容的類型",
|
624
627
|
"memberUnknown": "成員 \"{name}\" 未知",
|
package/dist/parser/parser.d.ts
CHANGED
@@ -77,6 +77,7 @@ export declare class Parser {
|
|
77
77
|
private _parseMatchStatement;
|
78
78
|
private _parseCaseStatement;
|
79
79
|
private _isPatternIrrefutable;
|
80
|
+
private _reportDuplicatePatternCaptureTargets;
|
80
81
|
private _getPatternTargetNames;
|
81
82
|
private _parsePatternSequence;
|
82
83
|
private _parsePatternAs;
|
package/dist/parser/parser.js
CHANGED
@@ -220,6 +220,8 @@ class Parser {
|
|
220
220
|
else if (peekToken.type === 9 /* Operator */) {
|
221
221
|
const operatorToken = peekToken;
|
222
222
|
if (operatorToken.operatorType !== 26 /* Multiply */ &&
|
223
|
+
operatorToken.operatorType !== 0 /* Add */ &&
|
224
|
+
operatorToken.operatorType !== 5 /* BitwiseInvert */ &&
|
223
225
|
operatorToken.operatorType !== 33 /* Subtract */) {
|
224
226
|
isInvalidMatchToken = true;
|
225
227
|
}
|
@@ -486,6 +488,11 @@ class Parser {
|
|
486
488
|
else {
|
487
489
|
casePattern = parseNodes_1.PatternSequenceNode.create(patternList.list[0], patternList.list);
|
488
490
|
}
|
491
|
+
if (casePattern.nodeType !== 0 /* Error */) {
|
492
|
+
const globalNameMap = new Map();
|
493
|
+
const localNameMap = new Map();
|
494
|
+
this._reportDuplicatePatternCaptureTargets(casePattern, globalNameMap, localNameMap);
|
495
|
+
}
|
489
496
|
let guardExpression;
|
490
497
|
if (this._consumeTokenIfKeyword(20 /* If */)) {
|
491
498
|
guardExpression = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
@@ -504,6 +511,79 @@ class Parser {
|
|
504
511
|
}
|
505
512
|
return false;
|
506
513
|
}
|
514
|
+
// Reports any situations where a capture target (a variable that receives part of a pattern)
|
515
|
+
// appears twice within the same pattern. This is complicated by the fact that duplicate targets
|
516
|
+
// are allowed in separate "or" clauses, so we need to track the targets we've seen globally
|
517
|
+
// as well as the targets we've seen locally within the current "or" clause.
|
518
|
+
_reportDuplicatePatternCaptureTargets(node, globalNameMap, localNameMap) {
|
519
|
+
const reportTargetIfDuplicate = (nameNode) => {
|
520
|
+
if (globalNameMap.has(nameNode.value) || localNameMap.has(nameNode.value)) {
|
521
|
+
this._addError(localize_1.Localizer.Diagnostic.duplicateCapturePatternTarget().format({
|
522
|
+
name: nameNode.value,
|
523
|
+
}), nameNode);
|
524
|
+
}
|
525
|
+
else {
|
526
|
+
localNameMap.set(nameNode.value, nameNode);
|
527
|
+
}
|
528
|
+
};
|
529
|
+
switch (node.nodeType) {
|
530
|
+
case 65 /* PatternSequence */: {
|
531
|
+
node.entries.forEach((subpattern) => {
|
532
|
+
this._reportDuplicatePatternCaptureTargets(subpattern, globalNameMap, localNameMap);
|
533
|
+
});
|
534
|
+
break;
|
535
|
+
}
|
536
|
+
case 68 /* PatternClass */: {
|
537
|
+
node.arguments.forEach((arg) => {
|
538
|
+
this._reportDuplicatePatternCaptureTargets(arg.pattern, globalNameMap, localNameMap);
|
539
|
+
});
|
540
|
+
break;
|
541
|
+
}
|
542
|
+
case 66 /* PatternAs */: {
|
543
|
+
if (node.target) {
|
544
|
+
reportTargetIfDuplicate(node.target);
|
545
|
+
}
|
546
|
+
const orLocalNameMaps = node.orPatterns.map((subpattern) => {
|
547
|
+
const orLocalNameMap = new Map();
|
548
|
+
this._reportDuplicatePatternCaptureTargets(subpattern, localNameMap, orLocalNameMap);
|
549
|
+
return orLocalNameMap;
|
550
|
+
});
|
551
|
+
const combinedLocalOrNameMap = new Map();
|
552
|
+
orLocalNameMaps.forEach((orLocalNameMap) => {
|
553
|
+
orLocalNameMap.forEach((node) => {
|
554
|
+
if (!combinedLocalOrNameMap.has(node.value)) {
|
555
|
+
combinedLocalOrNameMap.set(node.value, node);
|
556
|
+
reportTargetIfDuplicate(node);
|
557
|
+
}
|
558
|
+
});
|
559
|
+
});
|
560
|
+
break;
|
561
|
+
}
|
562
|
+
case 69 /* PatternCapture */: {
|
563
|
+
if (!node.isWildcard) {
|
564
|
+
reportTargetIfDuplicate(node.target);
|
565
|
+
}
|
566
|
+
break;
|
567
|
+
}
|
568
|
+
case 70 /* PatternMapping */: {
|
569
|
+
node.entries.forEach((mapEntry) => {
|
570
|
+
if (mapEntry.nodeType === 72 /* PatternMappingExpandEntry */) {
|
571
|
+
reportTargetIfDuplicate(mapEntry.target);
|
572
|
+
}
|
573
|
+
else {
|
574
|
+
this._reportDuplicatePatternCaptureTargets(mapEntry.keyPattern, globalNameMap, localNameMap);
|
575
|
+
this._reportDuplicatePatternCaptureTargets(mapEntry.valuePattern, globalNameMap, localNameMap);
|
576
|
+
}
|
577
|
+
});
|
578
|
+
break;
|
579
|
+
}
|
580
|
+
case 67 /* PatternLiteral */:
|
581
|
+
case 73 /* PatternValue */:
|
582
|
+
case 0 /* Error */: {
|
583
|
+
break;
|
584
|
+
}
|
585
|
+
}
|
586
|
+
}
|
507
587
|
_getPatternTargetNames(node, nameSet) {
|
508
588
|
switch (node.nodeType) {
|
509
589
|
case 65 /* PatternSequence */: {
|
@@ -561,24 +641,6 @@ class Parser {
|
|
561
641
|
if (starEntries.length > 1) {
|
562
642
|
this._addError(localize_1.Localizer.Diagnostic.duplicateStarPattern(), starEntries[1].orPatterns[0]);
|
563
643
|
}
|
564
|
-
// Look for redundant capture targets.
|
565
|
-
const captureTargetMap = new Map();
|
566
|
-
patternList.list.forEach((asPattern) => {
|
567
|
-
asPattern.orPatterns.forEach((patternAtom) => {
|
568
|
-
if (patternAtom.nodeType === 69 /* PatternCapture */ &&
|
569
|
-
!patternAtom.isStar &&
|
570
|
-
!patternAtom.isWildcard) {
|
571
|
-
if (captureTargetMap.has(patternAtom.target.value)) {
|
572
|
-
this._addError(localize_1.Localizer.Diagnostic.duplicateCapturePatternTarget().format({
|
573
|
-
name: patternAtom.target.value,
|
574
|
-
}), patternAtom);
|
575
|
-
}
|
576
|
-
else {
|
577
|
-
captureTargetMap.set(patternAtom.target.value, patternAtom);
|
578
|
-
}
|
579
|
-
}
|
580
|
-
});
|
581
|
-
});
|
582
644
|
return patternList;
|
583
645
|
}
|
584
646
|
// as_pattern: or_pattern ['as' NAME]
|