@zzzen/pyright-internal 1.2.0-dev.20220814 → 1.2.0-dev.20220821

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.
@@ -1884,11 +1884,11 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1884
1884
  return (suppressedNodeStack.some((suppressedNode) => ParseTreeUtils.isNodeContainedWithin(node, suppressedNode)) ||
1885
1885
  speculativeTypeTracker.isSpeculative(node));
1886
1886
  }
1887
- function addDiagnostic(diagLevel, rule, message, node) {
1887
+ function addDiagnostic(diagLevel, rule, message, node, range) {
1888
1888
  if (diagLevel === 'none') {
1889
1889
  return undefined;
1890
1890
  }
1891
- const diagnostic = addDiagnosticWithSuppressionCheck(diagLevel, message, node);
1891
+ const diagnostic = addDiagnosticWithSuppressionCheck(diagLevel, message, node, range);
1892
1892
  if (diagnostic) {
1893
1893
  diagnostic.setRule(rule);
1894
1894
  }
@@ -1917,6 +1917,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1917
1917
  addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeExpectedClass().format({ type: printType(type) }) + diag.getString(), node);
1918
1918
  }
1919
1919
  function assignTypeToNameNode(nameNode, type, isTypeIncomplete, ignoreEmptyContainers, srcExpression, allowAssignmentToFinalVar = false, expectedTypeDiagAddendum) {
1920
+ var _a, _b;
1920
1921
  const nameValue = nameNode.value;
1921
1922
  const symbolWithScope = lookUpSymbolRecursive(nameNode, nameValue, /* honorCodeFlow */ false);
1922
1923
  if (!symbolWithScope) {
@@ -1954,7 +1955,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1954
1955
  addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeAssignmentMismatch().format({
1955
1956
  sourceType: printType(type),
1956
1957
  destType: printType(declaredType),
1957
- }) + diagAddendum.getString(), srcExpression !== null && srcExpression !== void 0 ? srcExpression : nameNode);
1958
+ }) + diagAddendum.getString(), srcExpression !== null && srcExpression !== void 0 ? srcExpression : nameNode, (_b = (_a = diagAddendum.getEffectiveTextRange()) !== null && _a !== void 0 ? _a : srcExpression) !== null && _b !== void 0 ? _b : nameNode);
1958
1959
  // Replace the assigned type with the (unnarrowed) declared type.
1959
1960
  destType = declaredType;
1960
1961
  }
@@ -3145,7 +3146,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3145
3146
  return typeResult;
3146
3147
  }
3147
3148
  function getTypeOfMemberAccessWithBaseType(node, baseTypeResult, usage, flags) {
3148
- var _a;
3149
+ var _a, _b;
3149
3150
  let baseType = baseTypeResult.type;
3150
3151
  const memberName = node.memberName.value;
3151
3152
  let diag = new diagnostic_1.DiagnosticAddendum();
@@ -3415,7 +3416,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3415
3416
  const [ruleSet, rule] = isFunctionRule
3416
3417
  ? [fileInfo.diagnosticRuleSet.reportFunctionMemberAccess, diagnosticRules_1.DiagnosticRule.reportFunctionMemberAccess]
3417
3418
  : [fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues];
3418
- addDiagnostic(ruleSet, rule, diagMessage.format({ name: memberName, type: printType(baseType) }) + diag.getString(), node.memberName);
3419
+ addDiagnostic(ruleSet, rule, diagMessage.format({ name: memberName, type: printType(baseType) }) + diag.getString(), node.memberName, (_a = diag.getEffectiveTextRange()) !== null && _a !== void 0 ? _a : node.memberName);
3419
3420
  }
3420
3421
  // If this is member access on a function, use "Any" so if the
3421
3422
  // reportFunctionMemberAccess rule is disabled, we don't trigger
@@ -3436,7 +3437,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3436
3437
  // It can also come up in cases like "isinstance(x, (list, dict))".
3437
3438
  if ((0, types_1.isInstantiableClass)(type)) {
3438
3439
  const argNode = ParseTreeUtils.getParentNodeOfType(node, 1 /* Argument */);
3439
- if (argNode && ((_a = argNode === null || argNode === void 0 ? void 0 : argNode.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* Call */) {
3440
+ if (argNode && ((_b = argNode === null || argNode === void 0 ? void 0 : argNode.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 9 /* Call */) {
3440
3441
  skipPartialUnknownCheck = true;
3441
3442
  }
3442
3443
  }
@@ -7207,6 +7208,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
7207
7208
  return !reportedArgError;
7208
7209
  }
7209
7210
  function validateArgType(argParam, typeVarContext, functionType, skipUnknownCheck, skipOverloadArg, useNarrowBoundOnly, conditionFilter) {
7211
+ var _a;
7210
7212
  let argType;
7211
7213
  let expectedTypeDiag;
7212
7214
  let isTypeIncomplete = false;
@@ -7380,7 +7382,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
7380
7382
  if (expectedTypeDiag) {
7381
7383
  diag = expectedTypeDiag;
7382
7384
  }
7383
- addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message + diag.getString(), argParam.errorNode);
7385
+ addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message + diag.getString(), argParam.errorNode, (_a = diag.getEffectiveTextRange()) !== null && _a !== void 0 ? _a : argParam.errorNode);
7384
7386
  }
7385
7387
  return { isCompatible: false, argType, isTypeIncomplete, condition };
7386
7388
  }
@@ -8435,7 +8437,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8435
8437
  isIncomplete = true;
8436
8438
  }
8437
8439
  if (types_1.ClassType.isTypedDictClass(expectedType)) {
8438
- const resultTypedDict = (0, typedDicts_1.assignToTypedDict)(evaluatorInterface, expectedType, keyTypes, valueTypes, expectedDiagAddendum);
8440
+ const resultTypedDict = (0, typedDicts_1.assignToTypedDict)(evaluatorInterface, expectedType, keyTypes, valueTypes,
8441
+ // Don't overwrite existing expectedDiagAddendum messages if they were
8442
+ // already provided by getKeyValueTypesFromDictionary.
8443
+ (expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.isEmpty()) ? expectedDiagAddendum : undefined);
8439
8444
  if (resultTypedDict) {
8440
8445
  return {
8441
8446
  type: resultTypedDict,
@@ -8469,8 +8474,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8469
8474
  // and Iterable use covariant value types, so they can be narrowed.
8470
8475
  const isValueTypeInvariant = (0, types_1.isClassInstance)(expectedType) &&
8471
8476
  (types_1.ClassType.isBuiltIn(expectedType, 'dict') || types_1.ClassType.isBuiltIn(expectedType, 'MutableMapping'));
8472
- const specializedKeyType = inferTypeArgFromExpectedType(expectedKeyType, keyTypes, /* isNarrowable */ false);
8473
- const specializedValueType = inferTypeArgFromExpectedType(expectedValueType, valueTypes,
8477
+ const specializedKeyType = inferTypeArgFromExpectedType(expectedKeyType, keyTypes.map((result) => result.type),
8478
+ /* isNarrowable */ false);
8479
+ const specializedValueType = inferTypeArgFromExpectedType(expectedValueType, valueTypes.map((result) => result.type),
8474
8480
  /* isNarrowable */ !isValueTypeInvariant);
8475
8481
  if (!specializedKeyType || !specializedValueType) {
8476
8482
  return undefined;
@@ -8484,17 +8490,18 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8484
8490
  const fallbackType = hasExpectedType ? types_1.AnyType.create() : types_1.UnknownType.create();
8485
8491
  let keyType = fallbackType;
8486
8492
  let valueType = fallbackType;
8487
- let keyTypes = [];
8488
- let valueTypes = [];
8493
+ const keyTypeResults = [];
8494
+ const valueTypeResults = [];
8489
8495
  let isEmptyContainer = false;
8490
8496
  let isIncomplete = false;
8491
8497
  // Infer the key and value types if possible.
8492
- if (getKeyAndValueTypesFromDictionary(node, keyTypes, valueTypes, /* forceStrictInference */ hasExpectedType)) {
8498
+ if (getKeyAndValueTypesFromDictionary(node, keyTypeResults, valueTypeResults,
8499
+ /* forceStrictInference */ hasExpectedType)) {
8493
8500
  isIncomplete = true;
8494
8501
  }
8495
8502
  // Strip any literal values.
8496
- keyTypes = keyTypes.map((t) => stripLiteralValue(t));
8497
- valueTypes = valueTypes.map((t) => stripLiteralValue(t));
8503
+ const keyTypes = keyTypeResults.map((t) => stripLiteralValue(t.type));
8504
+ const valueTypes = valueTypeResults.map((t) => stripLiteralValue(t.type));
8498
8505
  keyType = keyTypes.length > 0 ? (0, types_1.combineTypes)(keyTypes) : fallbackType;
8499
8506
  // If the value type differs and we're not using "strict inference mode",
8500
8507
  // we need to back off because we can't properly represent the mappings
@@ -8556,8 +8563,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8556
8563
  isIncomplete = true;
8557
8564
  }
8558
8565
  if (forceStrictInference || index < maxEntriesToUseForInference) {
8559
- keyTypes.push(keyType);
8560
- valueTypes.push(valueType);
8566
+ keyTypes.push({ node: entryNode.keyExpression, type: keyType });
8567
+ valueTypes.push({ node: entryNode.valueExpression, type: valueType });
8561
8568
  }
8562
8569
  addUnknown = false;
8563
8570
  }
@@ -8578,8 +8585,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8578
8585
  /* allowNarrowed */ true);
8579
8586
  tdEntries.forEach((entry, name) => {
8580
8587
  if (entry.isRequired || entry.isProvided) {
8581
- keyTypes.push(types_1.ClassType.cloneWithLiteral(strObject, name));
8582
- valueTypes.push(entry.valueType);
8588
+ keyTypes.push({ node: entryNode, type: types_1.ClassType.cloneWithLiteral(strObject, name) });
8589
+ valueTypes.push({ node: entryNode, type: entry.valueType });
8583
8590
  }
8584
8591
  });
8585
8592
  addUnknown = false;
@@ -8604,8 +8611,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8604
8611
  const typeArgs = specializedMapping.typeArguments;
8605
8612
  if (typeArgs && typeArgs.length >= 2) {
8606
8613
  if (forceStrictInference || index < maxEntriesToUseForInference) {
8607
- keyTypes.push(typeArgs[0]);
8608
- valueTypes.push(typeArgs[1]);
8614
+ keyTypes.push({ node: entryNode, type: typeArgs[0] });
8615
+ valueTypes.push({ node: entryNode, type: typeArgs[1] });
8609
8616
  }
8610
8617
  addUnknown = false;
8611
8618
  }
@@ -8628,8 +8635,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8628
8635
  const typeArgs = (_a = dictEntryType.tupleTypeArguments) === null || _a === void 0 ? void 0 : _a.map((t) => t.type);
8629
8636
  if (typeArgs && typeArgs.length === 2) {
8630
8637
  if (forceStrictInference || index < maxEntriesToUseForInference) {
8631
- keyTypes.push(typeArgs[0]);
8632
- valueTypes.push(typeArgs[1]);
8638
+ keyTypes.push({ node: entryNode, type: typeArgs[0] });
8639
+ valueTypes.push({ node: entryNode, type: typeArgs[1] });
8633
8640
  }
8634
8641
  addUnknown = false;
8635
8642
  }
@@ -8637,8 +8644,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8637
8644
  }
8638
8645
  if (addUnknown) {
8639
8646
  if (forceStrictInference || index < maxEntriesToUseForInference) {
8640
- keyTypes.push(types_1.UnknownType.create());
8641
- valueTypes.push(types_1.UnknownType.create());
8647
+ keyTypes.push({ node: entryNode, type: types_1.UnknownType.create() });
8648
+ valueTypes.push({ node: entryNode, type: types_1.UnknownType.create() });
8642
8649
  }
8643
8650
  }
8644
8651
  });