@zzzen/pyright-internal 1.2.0-dev.20250413 → 1.2.0-dev.20250802
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/analyzerFileInfo.d.ts +0 -1
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/analyzerNodeInfo.js +1 -1
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.d.ts +2 -1
- package/dist/analyzer/binder.js +45 -38
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +81 -44
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +19 -7
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +9 -8
- package/dist/analyzer/codeFlowTypes.js +9 -8
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +4 -2
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/dataClasses.js +7 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringUtils.js +3 -1
- package/dist/analyzer/docStringUtils.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +0 -1
- package/dist/analyzer/importResolver.js +2 -25
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.d.ts +0 -1
- package/dist/analyzer/importStatementUtils.js +5 -3
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +10 -0
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +1 -1
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +5 -3
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +10 -3
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +3 -4
- package/dist/analyzer/parseTreeUtils.js +19 -225
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +4 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -2
- package/dist/analyzer/program.js +78 -75
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/programTypes.d.ts +2 -2
- package/dist/analyzer/programTypes.js.map +1 -1
- package/dist/analyzer/properties.js +3 -5
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +13 -3
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/sentinel.d.ts +4 -0
- package/dist/analyzer/sentinel.js +51 -0
- package/dist/analyzer/sentinel.js.map +1 -0
- package/dist/analyzer/service.d.ts +2 -2
- package/dist/analyzer/service.js +7 -6
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +5 -2
- package/dist/analyzer/sourceFile.js +53 -15
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.d.ts +10 -1
- package/dist/analyzer/sourceFileInfo.js +28 -0
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +4 -4
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +1 -1
- package/dist/analyzer/sourceMapper.js +20 -20
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +3 -0
- package/dist/analyzer/symbol.js +11 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/testWalker.js +2 -13
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +1 -1
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +278 -147
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +8 -4
- package/dist/analyzer/typeEvaluatorTypes.js +15 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +47 -13
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +10 -2
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typePrinterUtils.js +2 -2
- package/dist/analyzer/typePrinterUtils.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +2 -0
- package/dist/analyzer/typeUtils.js +14 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +9 -5
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +9 -2
- package/dist/analyzer/types.js +39 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.d.ts +96 -0
- package/dist/commands/dumpFileDebugInfoCommand.js +13 -2
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +1 -1
- package/dist/common/cancellationUtils.js +2 -2
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/charCodes.d.ts +1 -1
- package/dist/common/charCodes.js +1 -1
- package/dist/common/charCodes.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +5 -0
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/core.d.ts +1 -3
- package/dist/common/core.js +3 -4
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.d.ts +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/docRange.d.ts +6 -0
- package/dist/common/docRange.js +10 -0
- package/dist/common/docRange.js.map +1 -0
- package/dist/common/envVarUtils.js +1 -6
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +11 -2
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.d.ts +1 -0
- package/dist/common/fileBasedCancellationUtils.js +1 -0
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/logTracker.d.ts +5 -1
- package/dist/common/logTracker.js +43 -26
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/pathUtils.d.ts +1 -1
- package/dist/common/pathUtils.js +3 -2
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +1 -1
- package/dist/common/realFileSystem.js +2 -1
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.js +2 -2
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/stringUtils.d.ts +0 -1
- package/dist/common/stringUtils.js +0 -42
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.js +5 -3
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRange.d.ts +5 -11
- package/dist/common/textRange.js +31 -56
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/textRangeCollection.js +3 -2
- package/dist/common/textRangeCollection.js.map +1 -1
- package/dist/common/uri/baseUri.js +2 -1
- package/dist/common/uri/baseUri.js.map +1 -1
- package/dist/common/uri/uri.d.ts +5 -2
- package/dist/common/uri/uri.js +21 -5
- package/dist/common/uri/uri.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +2 -2
- package/dist/common/uri/uriUtils.js +4 -3
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/common/workspaceEditUtils.js +9 -9
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +5 -3
- package/dist/languageServerBase.js +44 -37
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +3 -0
- package/dist/languageService/analyzerServiceExecutor.js +1 -0
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +2 -2
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +2 -3
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +16 -13
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.d.ts +2 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +4 -1
- package/dist/languageService/documentSymbolCollector.js +9 -7
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +1 -9
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.js +1 -0
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +1 -1
- package/dist/languageService/referencesProvider.d.ts +2 -1
- package/dist/languageService/referencesProvider.js +8 -7
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.js +4 -19
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +2 -0
- package/dist/languageService/tooltipUtils.js +2 -0
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +1 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +16 -2
- package/dist/localization/localize.js +16 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +23 -9
- package/dist/localization/package.nls.de.json +18 -4
- package/dist/localization/package.nls.en-us.json +53 -3
- package/dist/localization/package.nls.es.json +18 -4
- package/dist/localization/package.nls.fr.json +22 -8
- package/dist/localization/package.nls.it.json +23 -9
- package/dist/localization/package.nls.ja.json +18 -4
- package/dist/localization/package.nls.ko.json +23 -9
- package/dist/localization/package.nls.pl.json +18 -4
- package/dist/localization/package.nls.pt-br.json +18 -4
- package/dist/localization/package.nls.qps-ploc.json +17 -3
- package/dist/localization/package.nls.ru.json +18 -4
- package/dist/localization/package.nls.tr.json +23 -9
- package/dist/localization/package.nls.zh-cn.json +18 -4
- package/dist/localization/package.nls.zh-tw.json +18 -4
- package/dist/parser/characters.d.ts +1 -8
- package/dist/parser/characters.js +6 -3
- package/dist/parser/characters.js.map +1 -1
- package/dist/parser/parseNodeUtils.d.ts +12 -0
- package/dist/parser/parseNodeUtils.js +136 -0
- package/dist/parser/parseNodeUtils.js.map +1 -0
- package/dist/parser/parseNodes.d.ts +12 -2
- package/dist/parser/parseNodes.js +17 -2
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +5 -2
- package/dist/parser/parser.js +83 -47
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +3 -3
- package/dist/parser/tokenizer.js +58 -38
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +4 -3
- package/dist/parser/tokenizerTypes.js +4 -3
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +1 -1
- package/dist/pyright.js.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/tests/checker.test.js +2 -2
- package/dist/tests/common.test.js +6 -6
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js +29 -0
- package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js.map +1 -0
- package/dist/tests/fourslash/completions.declNames.method.fourslash.js +8 -8
- package/dist/tests/fourslash/import.pytyped.privateSymbols.fourslash.js +0 -18
- package/dist/tests/fourslash/import.pytyped.privateSymbols.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +3 -2
- package/dist/tests/harness/fourslash/testState.js +9 -3
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +1 -1
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -2
- package/dist/tests/lsp/languageServerTestUtils.js +2 -2
- package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
- package/dist/tests/parser.test.js +17 -0
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +1 -1
- package/dist/tests/service.test.js +4 -4
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +21 -4
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/stringUtils.test.js +0 -12
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +8 -3
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/testUtils.js +1 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/tokenizer.test.js +5 -5
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +11 -13
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +15 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +16 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +10 -4
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +1 -1
- package/dist/tests/typeEvaluator7.test.js +9 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +8 -0
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +7 -9
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/workspaceFactory.d.ts +12 -1
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -3
- package/dist/tests/fourslash/rename.args.fourslash.js +0 -72
- package/dist/tests/fourslash/rename.args.fourslash.js.map +0 -1
- /package/dist/tests/fourslash/{rename.args.fourslash.d.ts → completions.autoimport.unicode.fourslash.d.ts} +0 -0
package/dist/analyzer/checker.js
CHANGED
|
@@ -1392,8 +1392,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1392
1392
|
// Use the left side of the right expression for comparison purposes.
|
|
1393
1393
|
rightExpression = rightExpression.d.leftExpr;
|
|
1394
1394
|
}
|
|
1395
|
-
|
|
1396
|
-
|
|
1395
|
+
let leftType = this._evaluator.getType(node.d.leftExpr);
|
|
1396
|
+
let rightType = this._evaluator.getType(rightExpression);
|
|
1397
1397
|
if (!leftType || !rightType) {
|
|
1398
1398
|
return;
|
|
1399
1399
|
}
|
|
@@ -1405,6 +1405,33 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1405
1405
|
? localize_1.LocMessage.comparisonAlwaysFalse()
|
|
1406
1406
|
: localize_1.LocMessage.comparisonAlwaysTrue();
|
|
1407
1407
|
};
|
|
1408
|
+
const replaceEnumTypeWithLiteralValue = (type) => {
|
|
1409
|
+
return (0, typeUtils_1.mapSubtypes)(type, (subtype) => {
|
|
1410
|
+
if (!(0, types_1.isClassInstance)(subtype) ||
|
|
1411
|
+
!types_1.ClassType.isEnumClass(subtype) ||
|
|
1412
|
+
!subtype.shared.mro.some((base) => (0, types_1.isClass)(base) && types_1.ClassType.isBuiltIn(base, ['int', 'str', 'bytes']))) {
|
|
1413
|
+
return subtype;
|
|
1414
|
+
}
|
|
1415
|
+
// If this is an enum literal, replace it with its literal value.
|
|
1416
|
+
if (subtype.priv.literalValue instanceof types_1.EnumLiteral) {
|
|
1417
|
+
return subtype.priv.literalValue.itemType;
|
|
1418
|
+
}
|
|
1419
|
+
// If this is an enum class, replace it with the type of its members.
|
|
1420
|
+
const literalValues = (0, typeGuards_1.enumerateLiteralsForType)(this._evaluator, subtype);
|
|
1421
|
+
if (literalValues && literalValues.length > 0) {
|
|
1422
|
+
return (0, types_1.combineTypes)(literalValues.map((literalClass) => {
|
|
1423
|
+
const literalValue = literalClass.priv.literalValue;
|
|
1424
|
+
(0, debug_1.assert)(literalValue instanceof types_1.EnumLiteral);
|
|
1425
|
+
return literalValue.itemType;
|
|
1426
|
+
}));
|
|
1427
|
+
}
|
|
1428
|
+
return subtype;
|
|
1429
|
+
});
|
|
1430
|
+
};
|
|
1431
|
+
// Handle enum literals that are assignable to another (non-Enum) literal.
|
|
1432
|
+
// This can happen for IntEnum and StrEnum members.
|
|
1433
|
+
leftType = replaceEnumTypeWithLiteralValue(leftType);
|
|
1434
|
+
rightType = replaceEnumTypeWithLiteralValue(rightType);
|
|
1408
1435
|
// Check for the special case where the LHS and RHS are both literals.
|
|
1409
1436
|
if ((0, typeUtils_1.isLiteralTypeOrUnion)(rightType) && (0, typeUtils_1.isLiteralTypeOrUnion)(leftType)) {
|
|
1410
1437
|
if ((0, staticExpressions_1.evaluateStaticBoolExpression)(node, this._fileInfo.executionEnvironment, this._fileInfo.definedConstants) === undefined) {
|
|
@@ -1477,7 +1504,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1477
1504
|
types_1.ClassType.isBuiltIn(declaredReturnType, 'AwaitableGenerator')) {
|
|
1478
1505
|
// Handle the old-style (pre-await) generator case
|
|
1479
1506
|
// if the return type explicitly uses AwaitableGenerator.
|
|
1480
|
-
generatorType =
|
|
1507
|
+
generatorType =
|
|
1508
|
+
this._evaluator.getTypeCheckerInternalsType(node, 'AwaitableGenerator') ??
|
|
1509
|
+
this._evaluator.getTypingType(node, 'AwaitableGenerator');
|
|
1481
1510
|
}
|
|
1482
1511
|
else {
|
|
1483
1512
|
generatorType = this._evaluator.getTypingType(node, node.d.isAsync ? 'AsyncGenerator' : 'Generator');
|
|
@@ -1805,7 +1834,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1805
1834
|
if (types_1.FunctionType.isInstanceMethod(functionType) && functionType.shared.name === '__get__') {
|
|
1806
1835
|
return false;
|
|
1807
1836
|
}
|
|
1808
|
-
let flags = 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
|
|
1837
|
+
let flags = 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
|
|
1838
|
+
16 /* AssignTypeFlags.OverloadOverlap */ |
|
|
1839
|
+
131072 /* AssignTypeFlags.DisallowExtraKwargsForTd */;
|
|
1809
1840
|
if (partialOverlap) {
|
|
1810
1841
|
flags |= 32 /* AssignTypeFlags.PartialOverloadOverlap */;
|
|
1811
1842
|
}
|
|
@@ -1844,7 +1875,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1844
1875
|
overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
|
|
1845
1876
|
}
|
|
1846
1877
|
// First check the parameters to see if they are assignable.
|
|
1847
|
-
let isConsistent = this._evaluator.assignType(overloadBound, implBound, diag, constraints, 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
|
|
1878
|
+
let isConsistent = this._evaluator.assignType(overloadBound, implBound, diag, constraints, 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
|
|
1879
|
+
2 /* AssignTypeFlags.Contravariant */ |
|
|
1880
|
+
512 /* AssignTypeFlags.SkipSelfClsTypeCheck */ |
|
|
1881
|
+
131072 /* AssignTypeFlags.DisallowExtraKwargsForTd */);
|
|
1848
1882
|
// Now check the return types.
|
|
1849
1883
|
const overloadReturnType = this._evaluator.solveAndApplyConstraints(types_1.FunctionType.getEffectiveReturnType(overloadBound) ?? this._evaluator.getInferredReturnType(overloadBound), constraints);
|
|
1850
1884
|
const implReturnType = this._evaluator.solveAndApplyConstraints(types_1.FunctionType.getEffectiveReturnType(implBound) ?? this._evaluator.getInferredReturnType(implBound), constraints);
|
|
@@ -1874,7 +1908,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1874
1908
|
const start = statement.start;
|
|
1875
1909
|
const lastStatement = statements[statements.length - 1];
|
|
1876
1910
|
const end = textRange_1.TextRange.getEnd(lastStatement);
|
|
1877
|
-
|
|
1911
|
+
const textRange = { start, length: end - start };
|
|
1912
|
+
if (reachability === typeEvaluatorTypes_1.Reachability.UnreachableByAnalysis ||
|
|
1913
|
+
reachability === typeEvaluatorTypes_1.Reachability.UnreachableStructural) {
|
|
1914
|
+
this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportUnreachable, reachability === typeEvaluatorTypes_1.Reachability.UnreachableStructural
|
|
1915
|
+
? localize_1.LocMessage.unreachableCodeStructure()
|
|
1916
|
+
: localize_1.LocMessage.unreachableCodeType(), statement.nodeType === 0 /* ParseNodeType.Error */ ? statement : statement.d.firstToken);
|
|
1917
|
+
}
|
|
1918
|
+
this._evaluator.addUnreachableCode(statement, reachability, textRange);
|
|
1878
1919
|
reportedUnreachable = true;
|
|
1879
1920
|
}
|
|
1880
1921
|
}
|
|
@@ -4625,22 +4666,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4625
4666
|
overrideType = (0, typeUtils_1.makeTypeVarsBound)(overrideType, [childClassType.shared.typeVarScopeId]);
|
|
4626
4667
|
baseType = (0, typeUtils_1.makeTypeVarsBound)(baseType, [childClassType.shared.typeVarScopeId]);
|
|
4627
4668
|
}
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
if (
|
|
4632
|
-
const
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
if (diag && origDecl) {
|
|
4640
|
-
diag.addRelatedInfo(localize_1.LocAddendum.finalMethod(), origDecl.uri, origDecl.range);
|
|
4641
|
-
}
|
|
4669
|
+
// Determine whether this is an attempt to override a method marked @final.
|
|
4670
|
+
if (this._isFinalFunction(memberName, baseClassAndSymbol.symbol, baseType)) {
|
|
4671
|
+
const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
|
|
4672
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
|
4673
|
+
const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
|
|
4674
|
+
name: memberName,
|
|
4675
|
+
className: baseClass.shared.name,
|
|
4676
|
+
}), decl.node.d.name);
|
|
4677
|
+
const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
|
|
4678
|
+
if (diag && origDecl) {
|
|
4679
|
+
diag.addRelatedInfo(localize_1.LocAddendum.finalMethod(), origDecl.uri, origDecl.range);
|
|
4642
4680
|
}
|
|
4643
4681
|
}
|
|
4682
|
+
}
|
|
4683
|
+
if ((0, types_1.isFunctionOrOverloaded)(baseType)) {
|
|
4684
|
+
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
|
4644
4685
|
// Don't check certain magic functions or private symbols.
|
|
4645
4686
|
// Also, skip this check if the class is a TypedDict. The methods for a TypedDict
|
|
4646
4687
|
// are synthesized, and they can result in many overloads. We assume they
|
|
@@ -4676,7 +4717,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4676
4717
|
// Special-case overrides of methods in '_TypedDict', since
|
|
4677
4718
|
// TypedDict attributes aren't manifest as attributes but rather
|
|
4678
4719
|
// as named keys.
|
|
4679
|
-
if (types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
|
|
4720
|
+
if (types_1.ClassType.isBuiltIn(baseClass, ['_TypedDict', 'TypedDictFallback'])) {
|
|
4680
4721
|
return;
|
|
4681
4722
|
}
|
|
4682
4723
|
const decls = overrideSymbol.getDeclarations();
|
|
@@ -4844,24 +4885,26 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4844
4885
|
}
|
|
4845
4886
|
}
|
|
4846
4887
|
}
|
|
4847
|
-
_isFinalFunction(name, type) {
|
|
4888
|
+
_isFinalFunction(name, symbol, type) {
|
|
4848
4889
|
if (SymbolNameUtils.isPrivateName(name)) {
|
|
4849
4890
|
return false;
|
|
4850
4891
|
}
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
const impl = types_1.OverloadedType.getImplementation(type);
|
|
4857
|
-
if (overloads.some((overload) => types_1.FunctionType.isFinal(overload))) {
|
|
4858
|
-
return true;
|
|
4892
|
+
// Was this declared with a "def" statement?
|
|
4893
|
+
const defDecls = [];
|
|
4894
|
+
symbol.getDeclarations().forEach((decl) => {
|
|
4895
|
+
if (decl.type === 5 /* DeclarationType.Function */ && decl.node.nodeType === 31 /* ParseNodeType.Function */) {
|
|
4896
|
+
defDecls.push(decl.node);
|
|
4859
4897
|
}
|
|
4860
|
-
|
|
4861
|
-
|
|
4898
|
+
});
|
|
4899
|
+
// Locate all final function declarations.
|
|
4900
|
+
const finalDefDecls = defDecls.filter((decl) => {
|
|
4901
|
+
const undecoratedFuncType = this._evaluator.getTypeOfFunction(decl)?.functionType;
|
|
4902
|
+
if (!undecoratedFuncType) {
|
|
4903
|
+
return false;
|
|
4862
4904
|
}
|
|
4863
|
-
|
|
4864
|
-
|
|
4905
|
+
return types_1.FunctionType.isFinal(undecoratedFuncType);
|
|
4906
|
+
});
|
|
4907
|
+
return finalDefDecls.length > 0;
|
|
4865
4908
|
}
|
|
4866
4909
|
_validatePropertyOverride(baseClassType, childClassType, baseType, childType, overrideSymbol, memberName) {
|
|
4867
4910
|
const propMethodInfo = [
|
|
@@ -4899,15 +4942,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4899
4942
|
}
|
|
4900
4943
|
return;
|
|
4901
4944
|
}
|
|
4902
|
-
else if (this._isFinalFunction(methodName, baseClassPropMethod)) {
|
|
4903
|
-
const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
|
|
4904
|
-
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
|
4905
|
-
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
|
|
4906
|
-
name: memberName,
|
|
4907
|
-
className: baseClassType.shared.name,
|
|
4908
|
-
}), decl.node.d.name);
|
|
4909
|
-
}
|
|
4910
|
-
}
|
|
4911
4945
|
const subclassMethodType = (0, typeUtils_1.partiallySpecializeType)(subclassPropMethod, childClassType, this._evaluator.getTypeClassType());
|
|
4912
4946
|
if (!(0, types_1.isFunction)(subclassMethodType)) {
|
|
4913
4947
|
return;
|
|
@@ -5185,7 +5219,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5185
5219
|
types_1.ClassType.isBuiltIn(declaredReturnType, 'AwaitableGenerator')) {
|
|
5186
5220
|
// Handle the old-style (pre-await) generator case
|
|
5187
5221
|
// if the return type explicitly uses AwaitableGenerator.
|
|
5188
|
-
generatorType =
|
|
5222
|
+
generatorType =
|
|
5223
|
+
this._evaluator.getTypeCheckerInternalsType(node, 'AwaitableGenerator') ??
|
|
5224
|
+
this._evaluator.getTypingType(node, 'AwaitableGenerator');
|
|
5189
5225
|
}
|
|
5190
5226
|
else {
|
|
5191
5227
|
generatorType = this._evaluator.getTypingType(node, enclosingFunctionNode.d.isAsync ? 'AsyncGenerator' : 'Generator');
|
|
@@ -5274,6 +5310,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5274
5310
|
// Were all of the exception types overridden?
|
|
5275
5311
|
if (typesOfThisExcept.length > 0 && typesOfThisExcept.length === overriddenExceptionCount) {
|
|
5276
5312
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportUnusedExcept, localize_1.LocMessage.unreachableExcept() + diagAddendum.getString(), except.d.typeExpr);
|
|
5313
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportUnreachable, localize_1.LocMessage.unreachableCodeType(), except.d.exceptSuite, except.d.exceptToken);
|
|
5277
5314
|
this._evaluator.addUnreachableCode(except, typeEvaluatorTypes_1.Reachability.UnreachableByAnalysis, except.d.exceptSuite);
|
|
5278
5315
|
}
|
|
5279
5316
|
}
|