@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.
Files changed (122) hide show
  1. package/dist/analyzer/binder.js +8 -2
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.d.ts +1 -0
  4. package/dist/analyzer/checker.js +123 -70
  5. package/dist/analyzer/checker.js.map +1 -1
  6. package/dist/analyzer/codeFlowEngine.js +23 -1
  7. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  8. package/dist/analyzer/constraintSolver.js +2 -1
  9. package/dist/analyzer/constraintSolver.js.map +1 -1
  10. package/dist/analyzer/constructorTransform.js +1 -1
  11. package/dist/analyzer/constructorTransform.js.map +1 -1
  12. package/dist/analyzer/dataClasses.js +242 -236
  13. package/dist/analyzer/dataClasses.js.map +1 -1
  14. package/dist/analyzer/decorators.js +11 -6
  15. package/dist/analyzer/decorators.js.map +1 -1
  16. package/dist/analyzer/deprecatedSymbols.d.ts +9 -0
  17. package/dist/analyzer/deprecatedSymbols.js +292 -0
  18. package/dist/analyzer/deprecatedSymbols.js.map +1 -0
  19. package/dist/analyzer/docStringConversion.js +7 -1
  20. package/dist/analyzer/docStringConversion.js.map +1 -1
  21. package/dist/analyzer/enums.js +12 -0
  22. package/dist/analyzer/enums.js.map +1 -1
  23. package/dist/analyzer/importResolver.js +8 -1
  24. package/dist/analyzer/importResolver.js.map +1 -1
  25. package/dist/analyzer/namedTuples.js +6 -0
  26. package/dist/analyzer/namedTuples.js.map +1 -1
  27. package/dist/analyzer/operations.d.ts +1 -1
  28. package/dist/analyzer/operations.js +2 -2
  29. package/dist/analyzer/operations.js.map +1 -1
  30. package/dist/analyzer/parameterUtils.d.ts +2 -1
  31. package/dist/analyzer/parameterUtils.js +15 -0
  32. package/dist/analyzer/parameterUtils.js.map +1 -1
  33. package/dist/analyzer/program.d.ts +3 -3
  34. package/dist/analyzer/program.js +5 -9
  35. package/dist/analyzer/program.js.map +1 -1
  36. package/dist/analyzer/protocols.js +14 -0
  37. package/dist/analyzer/protocols.js.map +1 -1
  38. package/dist/analyzer/service.js +2 -2
  39. package/dist/analyzer/service.js.map +1 -1
  40. package/dist/analyzer/sourceFile.js +1 -0
  41. package/dist/analyzer/sourceFile.js.map +1 -1
  42. package/dist/analyzer/typeEvaluator.js +713 -529
  43. package/dist/analyzer/typeEvaluator.js.map +1 -1
  44. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
  45. package/dist/analyzer/typeEvaluatorTypes.js +2 -2
  46. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  47. package/dist/analyzer/typeGuards.js +18 -4
  48. package/dist/analyzer/typeGuards.js.map +1 -1
  49. package/dist/analyzer/typePrinter.js +3 -0
  50. package/dist/analyzer/typePrinter.js.map +1 -1
  51. package/dist/analyzer/typeUtils.d.ts +3 -2
  52. package/dist/analyzer/typeUtils.js +30 -7
  53. package/dist/analyzer/typeUtils.js.map +1 -1
  54. package/dist/analyzer/typeVarContext.js +3 -1
  55. package/dist/analyzer/typeVarContext.js.map +1 -1
  56. package/dist/analyzer/types.d.ts +6 -1
  57. package/dist/analyzer/types.js +20 -0
  58. package/dist/analyzer/types.js.map +1 -1
  59. package/dist/common/cancellationUtils.d.ts +2 -1
  60. package/dist/common/cancellationUtils.js +3 -0
  61. package/dist/common/cancellationUtils.js.map +1 -1
  62. package/dist/common/configOptions.d.ts +1 -0
  63. package/dist/common/configOptions.js +5 -1
  64. package/dist/common/configOptions.js.map +1 -1
  65. package/dist/common/diagnosticRules.d.ts +1 -0
  66. package/dist/common/diagnosticRules.js +1 -0
  67. package/dist/common/diagnosticRules.js.map +1 -1
  68. package/dist/common/serviceProvider.d.ts +4 -3
  69. package/dist/languageServerBase.d.ts +2 -2
  70. package/dist/languageServerBase.js +4 -2
  71. package/dist/languageServerBase.js.map +1 -1
  72. package/dist/languageService/completionProvider.js +9 -3
  73. package/dist/languageService/completionProvider.js.map +1 -1
  74. package/dist/localization/localize.d.ts +25 -4
  75. package/dist/localization/localize.js +8 -2
  76. package/dist/localization/localize.js.map +1 -1
  77. package/dist/localization/package.nls.cs.json +15 -12
  78. package/dist/localization/package.nls.de.json +15 -12
  79. package/dist/localization/package.nls.en-us.json +18 -12
  80. package/dist/localization/package.nls.es.json +15 -12
  81. package/dist/localization/package.nls.fr.json +15 -12
  82. package/dist/localization/package.nls.it.json +15 -12
  83. package/dist/localization/package.nls.ja.json +15 -12
  84. package/dist/localization/package.nls.ko.json +15 -12
  85. package/dist/localization/package.nls.pl.json +15 -12
  86. package/dist/localization/package.nls.pt-br.json +15 -12
  87. package/dist/localization/package.nls.qps-ploc.json +15 -12
  88. package/dist/localization/package.nls.ru.json +15 -12
  89. package/dist/localization/package.nls.tr.json +15 -12
  90. package/dist/localization/package.nls.zh-cn.json +15 -12
  91. package/dist/localization/package.nls.zh-tw.json +14 -11
  92. package/dist/parser/parser.d.ts +1 -0
  93. package/dist/parser/parser.js +80 -18
  94. package/dist/parser/parser.js.map +1 -1
  95. package/dist/parser/tokenizer.d.ts +1 -1
  96. package/dist/parser/tokenizer.js +9 -5
  97. package/dist/parser/tokenizer.js.map +1 -1
  98. package/dist/server.js +1 -1
  99. package/dist/server.js.map +1 -1
  100. package/dist/tests/checker.test.js +34 -13
  101. package/dist/tests/checker.test.js.map +1 -1
  102. package/dist/tests/completions.test.js +39 -2
  103. package/dist/tests/completions.test.js.map +1 -1
  104. package/dist/tests/docStringConversion.test.js +23 -0
  105. package/dist/tests/docStringConversion.test.js.map +1 -1
  106. package/dist/tests/harness/fourslash/testState.d.ts +1 -1
  107. package/dist/tests/harness/fourslash/testState.js +2 -2
  108. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  109. package/dist/tests/typeEvaluator1.test.js +8 -4
  110. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  111. package/dist/tests/typeEvaluator2.test.js +13 -1
  112. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  113. package/dist/tests/typeEvaluator3.test.js +21 -23
  114. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  115. package/dist/tests/typeEvaluator4.test.js +21 -1
  116. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  117. package/dist/tests/typeEvaluator5.test.js +33 -1
  118. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  119. package/dist/workspaceFactory.d.ts +1 -1
  120. package/dist/workspaceFactory.js +3 -3
  121. package/dist/workspaceFactory.js.map +1 -1
  122. 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\" 的最後一個類型引數必須是 ParamSpec",
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": "此內容中不允許 \"Final\"",
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": "此內容中不允許 ParamSpec",
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": "具有宣告 \"{returnType}\" 型別的函式必須在所有程式碼路徑上傳回值",
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": "此內容中不允許 TypeVarTuple",
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": "此內容中不允許零長度 Tuple"
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}\" 未知",
@@ -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;
@@ -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]