@zzzen/pyright-internal 1.2.0-dev.20231126 → 1.2.0-dev.20231210
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 +4 -3
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +15 -14
- package/dist/analyzer/backgroundAnalysisProgram.js +38 -38
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +59 -52
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +4 -1
- package/dist/analyzer/checker.js +189 -42
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/circularDependency.d.ts +3 -2
- package/dist/analyzer/circularDependency.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +36 -36
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/commentUtils.js +7 -0
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +14 -5
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +2 -1
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +58 -47
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +5 -3
- package/dist/analyzer/declaration.js +3 -2
- package/dist/analyzer/declaration.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +3 -2
- package/dist/analyzer/declarationUtils.js +14 -12
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/enums.js +1 -1
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +29 -25
- package/dist/analyzer/importResolver.js +300 -301
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.d.ts +5 -4
- package/dist/analyzer/importResult.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +5 -4
- package/dist/analyzer/importStatementUtils.js +23 -22
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +3 -3
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +16 -14
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeReport.d.ts +7 -6
- package/dist/analyzer/packageTypeReport.js +4 -4
- package/dist/analyzer/packageTypeReport.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +68 -64
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parentDirectoryCache.d.ts +7 -6
- package/dist/analyzer/parentDirectoryCache.js +9 -10
- package/dist/analyzer/parentDirectoryCache.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/parseTreeUtils.js +6 -3
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +79 -14
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +27 -26
- package/dist/analyzer/program.js +162 -156
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +3 -3
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +27 -13
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/pyTypedUtils.d.ts +3 -2
- package/dist/analyzer/pyTypedUtils.js +4 -5
- package/dist/analyzer/pyTypedUtils.js.map +1 -1
- package/dist/analyzer/pythonPathUtils.d.ts +7 -6
- package/dist/analyzer/pythonPathUtils.js +21 -23
- package/dist/analyzer/pythonPathUtils.js.map +1 -1
- package/dist/analyzer/service.d.ts +24 -23
- package/dist/analyzer/service.js +187 -183
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +4 -5
- package/dist/analyzer/sourceFile.js +68 -56
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +3 -3
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +11 -10
- package/dist/analyzer/sourceMapper.js +59 -62
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/sourceMapperUtils.d.ts +2 -1
- package/dist/analyzer/sourceMapperUtils.js +2 -2
- package/dist/analyzer/sourceMapperUtils.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +3 -2
- package/dist/analyzer/tracePrinter.js +21 -23
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +2 -1
- package/dist/analyzer/typeDocStringUtils.js +14 -17
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +298 -231
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
- package/dist/analyzer/typeEvaluatorTypes.js +1 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +3 -3
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +2 -0
- package/dist/analyzer/typePrinter.js +48 -8
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.d.ts +2 -1
- package/dist/analyzer/typeStubWriter.js +2 -2
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +5 -3
- package/dist/analyzer/typeUtils.js +32 -17
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +2 -0
- package/dist/analyzer/typeVarContext.js +27 -0
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +6 -36
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +8 -12
- package/dist/analyzer/types.js +13 -20
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysis.d.ts +1 -2
- package/dist/backgroundAnalysis.js +6 -4
- package/dist/backgroundAnalysis.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +22 -20
- package/dist/backgroundAnalysisBase.js +76 -55
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +1 -1
- package/dist/backgroundThreadBase.js +20 -11
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/commandController.js +1 -2
- package/dist/commands/commandController.js.map +1 -1
- package/dist/commands/commands.d.ts +0 -1
- package/dist/commands/commands.js +0 -1
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/createTypeStub.js +3 -2
- package/dist/commands/createTypeStub.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +21 -20
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +5 -5
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/configOptions.d.ts +15 -13
- package/dist/common/configOptions.js +120 -30
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/diagnostic.d.ts +6 -9
- package/dist/common/diagnostic.js +2 -2
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/diagnosticSink.d.ts +2 -1
- package/dist/common/diagnosticSink.js.map +1 -1
- package/dist/common/editAction.d.ts +6 -5
- package/dist/common/editAction.js +2 -2
- package/dist/common/editAction.js.map +1 -1
- package/dist/common/envVarUtils.d.ts +2 -1
- package/dist/common/envVarUtils.js +20 -28
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +19 -19
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileSystem.d.ts +29 -28
- package/dist/common/fileWatcher.d.ts +3 -2
- package/dist/common/fileWatcher.js.map +1 -1
- package/dist/common/fullAccessHost.d.ts +8 -7
- package/dist/common/fullAccessHost.js +21 -16
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +7 -6
- package/dist/common/host.js +1 -1
- package/dist/common/host.js.map +1 -1
- package/dist/common/logTracker.d.ts +2 -1
- package/dist/common/logTracker.js +4 -4
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/pathUtils.d.ts +1 -28
- package/dist/common/pathUtils.js +17 -366
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +7 -3
- package/dist/common/realFileSystem.js +78 -60
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +2 -1
- package/dist/common/serviceProviderExtensions.js +5 -2
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/textEditTracker.d.ts +2 -1
- package/dist/common/textEditTracker.js +28 -28
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRange.d.ts +2 -1
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/uri/baseUri.d.ts +51 -0
- package/dist/common/uri/baseUri.js +194 -0
- package/dist/common/uri/baseUri.js.map +1 -0
- package/dist/common/uri/emptyUri.d.ts +32 -0
- package/dist/common/uri/emptyUri.js +122 -0
- package/dist/common/uri/emptyUri.js.map +1 -0
- package/dist/common/uri/fileUri.d.ts +36 -0
- package/dist/common/uri/fileUri.js +180 -0
- package/dist/common/uri/fileUri.js.map +1 -0
- package/dist/common/uri/memoization.d.ts +3 -0
- package/dist/common/uri/memoization.js +72 -0
- package/dist/common/uri/memoization.js.map +1 -0
- package/dist/common/uri/uri.d.ts +50 -0
- package/dist/common/uri/uri.js +104 -0
- package/dist/common/uri/uri.js.map +1 -0
- package/dist/common/uri/uriUtils.d.ts +39 -0
- package/dist/common/uri/uriUtils.js +362 -0
- package/dist/common/uri/uriUtils.js.map +1 -0
- package/dist/common/uri/webUri.d.ts +36 -0
- package/dist/common/uri/webUri.js +207 -0
- package/dist/common/uri/webUri.js.map +1 -0
- package/dist/common/workspaceEditUtils.d.ts +8 -8
- package/dist/common/workspaceEditUtils.js +34 -37
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +19 -22
- package/dist/languageServerBase.js +91 -95
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +2 -1
- package/dist/languageService/analyzerServiceExecutor.js +14 -16
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +11 -9
- package/dist/languageService/autoImporter.js +45 -44
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +3 -2
- package/dist/languageService/callHierarchyProvider.js +23 -35
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/codeActionProvider.d.ts +2 -1
- package/dist/languageService/codeActionProvider.js +8 -24
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +7 -6
- package/dist/languageService/completionProvider.js +32 -30
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.d.ts +2 -1
- package/dist/languageService/completionProviderUtils.js +1 -1
- package/dist/languageService/completionProviderUtils.js.map +1 -1
- package/dist/languageService/definitionProvider.d.ts +4 -3
- package/dist/languageService/definitionProvider.js +26 -24
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.d.ts +3 -2
- package/dist/languageService/documentHighlightProvider.js +3 -3
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +8 -7
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.d.ts +5 -4
- package/dist/languageService/documentSymbolProvider.js +9 -11
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +4 -3
- package/dist/languageService/hoverProvider.js +6 -5
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +2 -1
- package/dist/languageService/navigationUtils.js +2 -3
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/quickActions.d.ts +2 -2
- package/dist/languageService/quickActions.js +3 -83
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +10 -9
- package/dist/languageService/referencesProvider.js +28 -28
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.d.ts +4 -3
- package/dist/languageService/renameProvider.js +17 -18
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.d.ts +3 -2
- package/dist/languageService/signatureHelpProvider.js +4 -4
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +2 -1
- package/dist/languageService/symbolIndexer.js +1 -1
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +10 -4
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.d.ts +4 -3
- package/dist/languageService/workspaceSymbolProvider.js +10 -11
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +13 -9
- package/dist/localization/localize.js +7 -4
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +0 -4
- package/dist/localization/package.nls.de.json +0 -4
- package/dist/localization/package.nls.en-us.json +9 -6
- package/dist/localization/package.nls.es.json +2 -6
- package/dist/localization/package.nls.fr.json +0 -4
- package/dist/localization/package.nls.it.json +0 -4
- package/dist/localization/package.nls.ja.json +0 -4
- package/dist/localization/package.nls.ko.json +0 -4
- package/dist/localization/package.nls.pl.json +0 -4
- package/dist/localization/package.nls.pt-br.json +0 -4
- package/dist/localization/package.nls.qps-ploc.json +0 -4
- package/dist/localization/package.nls.ru.json +0 -4
- package/dist/localization/package.nls.tr.json +0 -4
- package/dist/localization/package.nls.zh-cn.json +0 -4
- package/dist/localization/package.nls.zh-tw.json +0 -4
- package/dist/pyright.js +18 -17
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +13 -13
- package/dist/pyrightFileSystem.js +39 -44
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +29 -28
- package/dist/readonlyAugmentedFileSystem.js +68 -61
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +22 -21
- package/dist/server.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +39 -30
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +38 -29
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +7 -3
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +24 -22
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/documentSymbolCollector.test.js +3 -2
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +37 -35
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +4 -4
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourslash/fourslash.d.ts +1 -2
- package/dist/tests/fourslash/hover.docstring.alias.fourslash.js +27 -11
- package/dist/tests/fourslash/hover.docstring.alias.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashParser.js +2 -2
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.d.ts +4 -5
- package/dist/tests/harness/fourslash/testLanguageService.js +9 -15
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.Consts.d.ts +1 -2
- package/dist/tests/harness/fourslash/testState.Consts.js +0 -1
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +4 -4
- package/dist/tests/harness/fourslash/testState.js +92 -52
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/testAccessHost.d.ts +3 -2
- package/dist/tests/harness/testAccessHost.js +2 -1
- package/dist/tests/harness/testAccessHost.js.map +1 -1
- package/dist/tests/harness/testHost.js +13 -11
- package/dist/tests/harness/testHost.js.map +1 -1
- package/dist/tests/harness/vfs/factory.d.ts +3 -2
- package/dist/tests/harness/vfs/factory.js +5 -4
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +32 -31
- package/dist/tests/harness/vfs/filesystem.js +47 -49
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +1 -10
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/importResolver.test.js +81 -58
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +10 -9
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +12 -11
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/logger.test.js +2 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +2 -1
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +3 -138
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/pyrightFileSystem.test.js +76 -25
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/service.test.js +37 -42
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +3 -2
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +8 -7
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +13 -6
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +13 -9
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testStateUtils.d.ts +2 -5
- package/dist/tests/testStateUtils.js +27 -64
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/testUtils.d.ts +3 -5
- package/dist/tests/testUtils.js +15 -64
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +4 -3
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +23 -19
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +21 -12
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +84 -70
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +26 -21
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +36 -31
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +4 -3
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/uri.test.d.ts +1 -0
- package/dist/tests/uri.test.js +695 -0
- package/dist/tests/uri.test.js.map +1 -0
- package/dist/tests/workspaceEditUtils.test.js +28 -28
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/tests/zipfs.test.js +11 -11
- package/dist/tests/zipfs.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +13 -14
- package/dist/workspaceFactory.js +54 -55
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -2
- package/dist/common/uriParser.d.ts +0 -24
- package/dist/common/uriParser.js +0 -45
- package/dist/common/uriParser.js.map +0 -1
package/dist/analyzer/checker.js
CHANGED
@@ -42,9 +42,9 @@ const collectionUtils_1 = require("../common/collectionUtils");
|
|
42
42
|
const debug_1 = require("../common/debug");
|
43
43
|
const diagnostic_1 = require("../common/diagnostic");
|
44
44
|
const diagnosticRules_1 = require("../common/diagnosticRules");
|
45
|
-
const pathUtils_1 = require("../common/pathUtils");
|
46
45
|
const pythonVersion_1 = require("../common/pythonVersion");
|
47
46
|
const textRange_1 = require("../common/textRange");
|
47
|
+
const uri_1 = require("../common/uri/uri");
|
48
48
|
const definitionProvider_1 = require("../languageService/definitionProvider");
|
49
49
|
const localize_1 = require("../localization/localize");
|
50
50
|
const parseNodes_1 = require("../parser/parseNodes");
|
@@ -98,7 +98,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
98
98
|
// Report code complexity issues for the module.
|
99
99
|
const codeComplexity = AnalyzerNodeInfo.getCodeFlowComplexity(this._moduleNode);
|
100
100
|
if (isPrintCodeComplexityEnabled) {
|
101
|
-
console.log(`Code complexity of module ${this._fileInfo.
|
101
|
+
console.log(`Code complexity of module ${this._fileInfo.fileUri.toUserVisibleString()} is ${codeComplexity.toString()}`);
|
102
102
|
}
|
103
103
|
if (codeComplexity > typeEvaluator_1.maxCodeComplexity) {
|
104
104
|
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.codeTooComplexToAnalyze(), { start: 0, length: 0 });
|
@@ -385,6 +385,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
385
385
|
this._validateTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
386
386
|
this._validateFunctionTypeVarUsage(node, functionTypeResult);
|
387
387
|
this._validateGeneratorReturnType(node, functionTypeResult.functionType);
|
388
|
+
this._reportDeprecatedClassProperty(node, functionTypeResult);
|
388
389
|
}
|
389
390
|
// If we're at the module level within a stub file, report a diagnostic
|
390
391
|
// if there is a '__getattr__' function defined when in strict mode.
|
@@ -412,6 +413,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
412
413
|
}
|
413
414
|
}
|
414
415
|
}
|
416
|
+
this._validateOverloadAttributeConsistency(node, functionTypeResult.decoratedType);
|
415
417
|
}
|
416
418
|
return false;
|
417
419
|
}
|
@@ -531,7 +533,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
531
533
|
return true;
|
532
534
|
}
|
533
535
|
visitReturn(node) {
|
534
|
-
var _a, _b;
|
536
|
+
var _a, _b, _c, _d, _e;
|
535
537
|
let returnTypeResult;
|
536
538
|
const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
|
537
539
|
const declaredReturnType = enclosingFunctionNode
|
@@ -600,17 +602,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
600
602
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeMismatch().format({
|
601
603
|
exprType: this._evaluator.printType(returnTypeResult.type),
|
602
604
|
returnType: this._evaluator.printType(declaredReturnType),
|
603
|
-
}) + diagAddendum.getString(), node.returnExpression ?
|
605
|
+
}) + diagAddendum.getString(), (_b = node.returnExpression) !== null && _b !== void 0 ? _b : node, (_c = returnTypeResult.expectedTypeDiagAddendum) === null || _c === void 0 ? void 0 : _c.getEffectiveTextRange());
|
604
606
|
}
|
605
607
|
}
|
606
608
|
}
|
607
609
|
if ((0, types_1.isUnknown)(returnTypeResult.type)) {
|
608
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), node.returnExpression);
|
610
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), (_d = node.returnExpression) !== null && _d !== void 0 ? _d : node);
|
609
611
|
}
|
610
612
|
else if ((0, typeUtils_1.isPartlyUnknown)(returnTypeResult.type)) {
|
611
613
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypePartiallyUnknown().format({
|
612
614
|
returnType: this._evaluator.printType(returnTypeResult.type, { expandTypeAlias: true }),
|
613
|
-
}), node.returnExpression);
|
615
|
+
}), (_e = node.returnExpression) !== null && _e !== void 0 ? _e : node);
|
614
616
|
}
|
615
617
|
}
|
616
618
|
return true;
|
@@ -992,10 +994,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
992
994
|
continue;
|
993
995
|
}
|
994
996
|
const resolvedAlias = this._evaluator.resolveAliasDeclaration(decl, /* resolveLocalNames */ true);
|
995
|
-
|
997
|
+
const resolvedAliasUri = resolvedAlias === null || resolvedAlias === void 0 ? void 0 : resolvedAlias.uri;
|
998
|
+
if (!resolvedAliasUri || !(0, sourceMapper_1.isStubFile)(resolvedAliasUri)) {
|
996
999
|
continue;
|
997
1000
|
}
|
998
|
-
const importResult = this._getImportResult(node,
|
1001
|
+
const importResult = this._getImportResult(node, resolvedAliasUri);
|
999
1002
|
if (!importResult) {
|
1000
1003
|
continue;
|
1001
1004
|
}
|
@@ -1030,6 +1033,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1030
1033
|
visitTypeParameter(node) {
|
1031
1034
|
return false;
|
1032
1035
|
}
|
1036
|
+
visitTypeAlias(node) {
|
1037
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
1038
|
+
if (scope) {
|
1039
|
+
if (scope.type !== 2 /* ScopeType.Class */ && scope.type !== 3 /* ScopeType.Module */ && scope.type !== 4 /* ScopeType.Builtin */) {
|
1040
|
+
this._evaluator.addError(localize_1.Localizer.Diagnostic.typeAliasStatementBadScope(), node.name);
|
1041
|
+
}
|
1042
|
+
}
|
1043
|
+
return true;
|
1044
|
+
}
|
1033
1045
|
visitTypeAnnotation(node) {
|
1034
1046
|
this._evaluator.getType(node.typeAnnotation);
|
1035
1047
|
return true;
|
@@ -1063,17 +1075,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1063
1075
|
// Don't explore further.
|
1064
1076
|
return false;
|
1065
1077
|
}
|
1066
|
-
_getImportResult(node,
|
1067
|
-
const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(
|
1078
|
+
_getImportResult(node, uri) {
|
1079
|
+
const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(uri);
|
1068
1080
|
const moduleNameNode = node.parent.module;
|
1069
1081
|
// Handle both absolute and relative imports.
|
1070
1082
|
const moduleName = moduleNameNode.leadingDots === 0
|
1071
|
-
? this._importResolver.getModuleNameForImport(
|
1072
|
-
: (0, importStatementUtils_1.getRelativeModuleName)(this._importResolver.fileSystem, this._fileInfo.
|
1083
|
+
? this._importResolver.getModuleNameForImport(uri, execEnv).moduleName
|
1084
|
+
: (0, importStatementUtils_1.getRelativeModuleName)(this._importResolver.fileSystem, this._fileInfo.fileUri, uri);
|
1073
1085
|
if (!moduleName) {
|
1074
1086
|
return undefined;
|
1075
1087
|
}
|
1076
|
-
return this._importResolver.resolveImport(this._fileInfo.
|
1088
|
+
return this._importResolver.resolveImport(this._fileInfo.fileUri, execEnv, (0, importResolver_1.createImportedModuleDescriptor)(moduleName));
|
1077
1089
|
}
|
1078
1090
|
_addMissingModuleSourceDiagnosticIfNeeded(importResult, node) {
|
1079
1091
|
if (importResult.isNativeLib ||
|
@@ -1691,6 +1703,31 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1691
1703
|
}
|
1692
1704
|
});
|
1693
1705
|
}
|
1706
|
+
// Validates that overloads use @staticmethod and @classmethod consistently.
|
1707
|
+
_validateOverloadAttributeConsistency(node, functionType) {
|
1708
|
+
var _a, _b, _c, _d, _e, _f;
|
1709
|
+
let staticMethodCount = 0;
|
1710
|
+
let classMethodCount = 0;
|
1711
|
+
functionType.overloads.forEach((overload) => {
|
1712
|
+
if (types_1.FunctionType.isStaticMethod(overload)) {
|
1713
|
+
staticMethodCount++;
|
1714
|
+
}
|
1715
|
+
if (types_1.FunctionType.isClassMethod(overload)) {
|
1716
|
+
classMethodCount++;
|
1717
|
+
}
|
1718
|
+
});
|
1719
|
+
if (staticMethodCount > 0 && staticMethodCount < functionType.overloads.length) {
|
1720
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadStaticMethodInconsistent().format({
|
1721
|
+
name: node.name.value,
|
1722
|
+
}), (_c = (_b = (_a = functionType.overloads[0]) === null || _a === void 0 ? void 0 : _a.details.declaration) === null || _b === void 0 ? void 0 : _b.node.name) !== null && _c !== void 0 ? _c : node.name);
|
1723
|
+
}
|
1724
|
+
if (classMethodCount > 0 && classMethodCount < functionType.overloads.length) {
|
1725
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overloadClassMethodInconsistent().format({
|
1726
|
+
name: node.name.value,
|
1727
|
+
}), (_f = (_e = (_d = functionType.overloads[0]) === null || _d === void 0 ? void 0 : _d.details.declaration) === null || _e === void 0 ? void 0 : _e.node.name) !== null && _f !== void 0 ? _f : node.name);
|
1728
|
+
}
|
1729
|
+
}
|
1730
|
+
// Validates that overloads do not overlap with inconsistent return results.
|
1694
1731
|
_validateOverloadConsistency(node, functionType, prevOverloads) {
|
1695
1732
|
for (let i = 0; i < prevOverloads.length; i++) {
|
1696
1733
|
const prevOverload = prevOverloads[i];
|
@@ -2042,7 +2079,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2042
2079
|
index: index + 1,
|
2043
2080
|
}) + diag.getString(), implementationFunction.details.declaration.node.name);
|
2044
2081
|
if (diagnostic && overload.details.declaration) {
|
2045
|
-
diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.
|
2082
|
+
diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.uri) !== null && _b !== void 0 ? _b : primaryDecl.uri, (_d = (_c = overload.details.declaration) === null || _c === void 0 ? void 0 : _c.range) !== null && _d !== void 0 ? _d : primaryDecl.range);
|
2046
2083
|
}
|
2047
2084
|
}
|
2048
2085
|
}
|
@@ -2212,7 +2249,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2212
2249
|
}
|
2213
2250
|
}
|
2214
2251
|
if (primaryDeclNode) {
|
2215
|
-
diag.addRelatedInfo(primaryDeclInfo, primaryDecl.
|
2252
|
+
diag.addRelatedInfo(primaryDeclInfo, primaryDecl.uri, primaryDecl.range);
|
2216
2253
|
}
|
2217
2254
|
}
|
2218
2255
|
};
|
@@ -2725,6 +2762,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2725
2762
|
}
|
2726
2763
|
return false;
|
2727
2764
|
}
|
2765
|
+
_reportDeprecatedClassProperty(node, functionTypeResult) {
|
2766
|
+
if (!(0, types_1.isClassInstance)(functionTypeResult.decoratedType) ||
|
2767
|
+
!types_1.ClassType.isClassProperty(functionTypeResult.decoratedType)) {
|
2768
|
+
return;
|
2769
|
+
}
|
2770
|
+
this._reportDeprecatedDiagnostic(node.name, localize_1.Localizer.Diagnostic.classPropertyDeprecated());
|
2771
|
+
}
|
2728
2772
|
_reportDeprecatedUseForMemberAccess(node, info) {
|
2729
2773
|
let errorMessage;
|
2730
2774
|
if (info.accessType === 'property') {
|
@@ -2838,6 +2882,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2838
2882
|
// the call expression and determine whether any of them
|
2839
2883
|
// are deprecated.
|
2840
2884
|
getDeprecatedMessageForOverloadedCall(this._evaluator, subtype);
|
2885
|
+
// If there the implementation itself is deprecated, assume it
|
2886
|
+
// is deprecated even if it's outside of a call expression.
|
2887
|
+
const overloadImpl = types_1.OverloadedFunctionType.getImplementation(subtype);
|
2888
|
+
if ((overloadImpl === null || overloadImpl === void 0 ? void 0 : overloadImpl.details.deprecatedMessage) !== undefined) {
|
2889
|
+
if (!overloadImpl.details.name || node.value === overloadImpl.details.name) {
|
2890
|
+
deprecatedMessage = overloadImpl.details.deprecatedMessage;
|
2891
|
+
errorMessage = getDeprecatedMessageForFunction(overloadImpl);
|
2892
|
+
}
|
2893
|
+
}
|
2841
2894
|
}
|
2842
2895
|
});
|
2843
2896
|
if (errorMessage) {
|
@@ -2910,18 +2963,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2910
2963
|
const stdlibPath = this._importResolver.getTypeshedStdLibPath(this._fileInfo.executionEnvironment);
|
2911
2964
|
if (stdlibPath &&
|
2912
2965
|
this._importResolver.isStdlibModule(desc, this._fileInfo.executionEnvironment) &&
|
2913
|
-
this._sourceMapper.isUserCode(this._fileInfo.
|
2966
|
+
this._sourceMapper.isUserCode(this._fileInfo.fileUri)) {
|
2914
2967
|
// This means the user has a module that is overwriting the stdlib module.
|
2915
2968
|
const diag = this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportShadowedImports, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.Localizer.Diagnostic.stdlibModuleOverridden().format({
|
2916
2969
|
name: moduleName,
|
2917
|
-
path: this._fileInfo.
|
2970
|
+
path: this._fileInfo.fileUri.toUserVisibleString(),
|
2918
2971
|
}), this._moduleNode);
|
2919
2972
|
// Add a quick action that renames the file.
|
2920
2973
|
if (diag) {
|
2921
2974
|
const renameAction = {
|
2922
2975
|
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2923
|
-
|
2924
|
-
|
2976
|
+
oldUri: this._fileInfo.fileUri,
|
2977
|
+
newUri: this._sourceMapper.getNextFileName(this._fileInfo.fileUri),
|
2925
2978
|
};
|
2926
2979
|
diag.addAction(renameAction);
|
2927
2980
|
}
|
@@ -2959,20 +3012,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2959
3012
|
if (stdlibPath && this._importResolver.isStdlibModule(module, this._fileInfo.executionEnvironment)) {
|
2960
3013
|
// If the definition for this name is in 'user' module, it is overwriting the stdlib module.
|
2961
3014
|
const definitions = definitionProvider_1.DefinitionProvider.getDefinitionsForNode(this._sourceMapper, this._evaluator, namePartNodes[namePartNodes.length - 1], namePartNodes[namePartNodes.length - 1].start, vscode_languageserver_1.CancellationToken.None);
|
2962
|
-
const paths = definitions ? definitions.map((d) => d.
|
3015
|
+
const paths = definitions ? definitions.map((d) => d.uri) : [];
|
2963
3016
|
paths.forEach((p) => {
|
2964
3017
|
if (!p.startsWith(stdlibPath) && !(0, sourceMapper_1.isStubFile)(p) && this._sourceMapper.isUserCode(p)) {
|
2965
3018
|
// This means the user has a module that is overwriting the stdlib module.
|
2966
3019
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportShadowedImports, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.Localizer.Diagnostic.stdlibModuleOverridden().format({
|
2967
3020
|
name: nameParts.join('.'),
|
2968
|
-
path: p,
|
3021
|
+
path: p.toUserVisibleString(),
|
2969
3022
|
}), node);
|
2970
3023
|
// Add a quick action that renames the file.
|
2971
3024
|
if (diag) {
|
2972
3025
|
const renameAction = {
|
2973
3026
|
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2974
|
-
|
2975
|
-
|
3027
|
+
oldUri: p,
|
3028
|
+
newUri: this._sourceMapper.getNextFileName(p),
|
2976
3029
|
};
|
2977
3030
|
diag.addAction(renameAction);
|
2978
3031
|
}
|
@@ -3281,14 +3334,21 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3281
3334
|
}
|
3282
3335
|
});
|
3283
3336
|
}
|
3284
|
-
// If a non-protocol class explicitly inherits from a protocol class
|
3285
|
-
// verifies that any class or instance
|
3286
|
-
// in the protocol class are implemented in
|
3287
|
-
//
|
3337
|
+
// If a non-protocol class explicitly inherits from a protocol class and does
|
3338
|
+
// not explicit derive from ABC, this method verifies that any class or instance
|
3339
|
+
// variables declared but not assigned in the protocol class are implemented in
|
3340
|
+
// the subclass. It also checks that any empty functions declared in the protocol
|
3341
|
+
// are implemented in the subclass.
|
3288
3342
|
_validateProtocolCompatibility(classType, errorNode) {
|
3289
3343
|
if (types_1.ClassType.isProtocolClass(classType)) {
|
3290
3344
|
return;
|
3291
3345
|
}
|
3346
|
+
// If a class derives from ABC, exempt it from this check. This is used for
|
3347
|
+
// mixins that derive from a protocol but do not directly implement all
|
3348
|
+
// of the protocol's methods.
|
3349
|
+
if (classType.details.mro.some((mroClass) => (0, types_1.isClass)(mroClass) && types_1.ClassType.isBuiltIn(mroClass, 'ABC'))) {
|
3350
|
+
return;
|
3351
|
+
}
|
3292
3352
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
3293
3353
|
const isSymbolImplemented = (name) => {
|
3294
3354
|
return classType.details.mro.some((mroClass) => {
|
@@ -3321,7 +3381,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3321
3381
|
}
|
3322
3382
|
else if (decls[0].type === 5 /* DeclarationType.Function */) {
|
3323
3383
|
if (decls.every((decl) => decl.type !== 5 /* DeclarationType.Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
|
3324
|
-
if (
|
3384
|
+
if (!decls[0].uri.hasExtension('.pyi')) {
|
3325
3385
|
if (!isSymbolImplemented(name)) {
|
3326
3386
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
|
3327
3387
|
name,
|
@@ -3401,7 +3461,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3401
3461
|
if (diagnostic) {
|
3402
3462
|
const fieldDecls = symbol.getTypedDeclarations();
|
3403
3463
|
if (fieldDecls.length > 0) {
|
3404
|
-
diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.dataClassFieldLocation(), fieldDecls[0].
|
3464
|
+
diagnostic.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.dataClassFieldLocation(), fieldDecls[0].uri, fieldDecls[0].range);
|
3405
3465
|
}
|
3406
3466
|
}
|
3407
3467
|
}
|
@@ -3563,7 +3623,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3563
3623
|
const updatedTypeParams = classType.details.typeParameters.map((typeParam) => types_1.TypeVarType.cloneAsInvariant(typeParam));
|
3564
3624
|
const updatedClassType = types_1.ClassType.cloneWithNewTypeParameters(classType, updatedTypeParams);
|
3565
3625
|
const objectObject = types_1.ClassType.cloneAsInstance(objectType);
|
3566
|
-
const dummyTypeObject = types_1.ClassType.createInstantiable('__varianceDummy', '', '',
|
3626
|
+
const dummyTypeObject = types_1.ClassType.createInstantiable('__varianceDummy', '', '', uri_1.Uri.empty(), 0, 0, undefined, undefined);
|
3567
3627
|
updatedTypeParams.forEach((param, paramIndex) => {
|
3568
3628
|
// Skip variadics and ParamSpecs.
|
3569
3629
|
if (param.details.isVariadic || param.details.isParamSpec) {
|
@@ -3751,7 +3811,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3751
3811
|
? localize_1.Localizer.DiagnosticAddendum.newMethodLocation()
|
3752
3812
|
: localize_1.Localizer.DiagnosticAddendum.initMethodLocation()).format({
|
3753
3813
|
type: this._evaluator.printType(types_1.ClassType.cloneAsInstance(displayOnInit ? newMethodResult.classType : initMethodResult.classType)),
|
3754
|
-
}), secondaryDecl.
|
3814
|
+
}), secondaryDecl.uri, secondaryDecl.range);
|
3755
3815
|
}
|
3756
3816
|
}
|
3757
3817
|
}
|
@@ -3947,12 +4007,63 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3947
4007
|
// If the child class overrides this symbol with its own type, make sure
|
3948
4008
|
// the override is compatible with the overridden symbol. Otherwise use the
|
3949
4009
|
// override type.
|
3950
|
-
|
4010
|
+
// Verify that the override type is assignable to (same or narrower than)
|
4011
|
+
// the declared type of the base symbol.
|
4012
|
+
const primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overriddenClassAndSymbol.symbol);
|
4013
|
+
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* DeclarationType.Variable */ && !primaryDecl.isFinal;
|
4014
|
+
// If the entry is a member of a frozen dataclass, it is immutable,
|
4015
|
+
// so it does not need to be invariant.
|
4016
|
+
if (types_1.ClassType.isFrozenDataClass(overriddenClassAndSymbol.classType) &&
|
4017
|
+
overriddenClassAndSymbol.classType.details.dataClassEntries) {
|
4018
|
+
const dataclassEntry = overriddenClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4019
|
+
if (dataclassEntry) {
|
4020
|
+
isInvariant = false;
|
4021
|
+
}
|
4022
|
+
}
|
4023
|
+
let overriddenTDEntry;
|
4024
|
+
if (overriddenClassAndSymbol.classType.details.typedDictEntries) {
|
4025
|
+
overriddenTDEntry = overriddenClassAndSymbol.classType.details.typedDictEntries.get(memberName);
|
4026
|
+
if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
|
4027
|
+
isInvariant = false;
|
4028
|
+
}
|
4029
|
+
}
|
4030
|
+
let overrideTDEntry;
|
4031
|
+
if (overrideClassAndSymbol.classType.details.typedDictEntries) {
|
4032
|
+
overrideTDEntry = overrideClassAndSymbol.classType.details.typedDictEntries.get(memberName);
|
4033
|
+
}
|
4034
|
+
if (!this._evaluator.assignType(overriddenType, childOverrideType !== null && childOverrideType !== void 0 ? childOverrideType : overrideType,
|
4035
|
+
/* diag */ undefined,
|
4036
|
+
/* destTypeVarContext */ undefined,
|
4037
|
+
/* srcTypeVarContext */ undefined, isInvariant ? 1 /* AssignTypeFlags.EnforceInvariance */ : 0 /* AssignTypeFlags.Default */)) {
|
3951
4038
|
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.baseClassVariableTypeIncompatible().format({
|
3952
4039
|
classType: childClassType.details.name,
|
3953
4040
|
name: memberName,
|
3954
4041
|
}), errorNode);
|
3955
4042
|
}
|
4043
|
+
else if (overriddenTDEntry && overrideTDEntry) {
|
4044
|
+
let isRequiredCompatible;
|
4045
|
+
let isReadOnlyCompatible = true;
|
4046
|
+
// If both classes are TypedDicts and they both define this field,
|
4047
|
+
// make sure the attributes are compatible.
|
4048
|
+
if (overriddenTDEntry.isReadOnly) {
|
4049
|
+
isRequiredCompatible = overrideTDEntry.isRequired || !overriddenTDEntry.isRequired;
|
4050
|
+
}
|
4051
|
+
else {
|
4052
|
+
isReadOnlyCompatible = !overrideTDEntry.isReadOnly;
|
4053
|
+
isRequiredCompatible = overrideTDEntry.isRequired === overriddenTDEntry.isRequired;
|
4054
|
+
}
|
4055
|
+
if (!isRequiredCompatible) {
|
4056
|
+
const message = overrideTDEntry.isRequired
|
4057
|
+
? localize_1.Localizer.Diagnostic.typedDictFieldRequiredRedefinition
|
4058
|
+
: localize_1.Localizer.Diagnostic.typedDictFieldNotRequiredRedefinition;
|
4059
|
+
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, message().format({ name: memberName }), errorNode);
|
4060
|
+
}
|
4061
|
+
else if (!isReadOnlyCompatible) {
|
4062
|
+
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.typedDictFieldReadOnlyRedefinition().format({
|
4063
|
+
name: memberName,
|
4064
|
+
}), errorNode);
|
4065
|
+
}
|
4066
|
+
}
|
3956
4067
|
}
|
3957
4068
|
}
|
3958
4069
|
}
|
@@ -3960,11 +4071,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3960
4071
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverriddenType().format({
|
3961
4072
|
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overriddenClassAndSymbol.classType)),
|
3962
4073
|
type: this._evaluator.printType(overriddenType),
|
3963
|
-
}), overriddenDecl.
|
4074
|
+
}), overriddenDecl.uri, overriddenDecl.range);
|
3964
4075
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverridesType().format({
|
3965
4076
|
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overrideClassAndSymbol.classType)),
|
3966
4077
|
type: this._evaluator.printType(overrideType),
|
3967
|
-
}), overrideDecl.
|
4078
|
+
}), overrideDecl.uri, overrideDecl.range);
|
3968
4079
|
}
|
3969
4080
|
}
|
3970
4081
|
// Validates that any overridden methods or variables contain the same
|
@@ -4129,7 +4240,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4129
4240
|
}) + diagAddendum.getString(), decl.type === 5 /* DeclarationType.Function */ ? decl.node.name : decl.node);
|
4130
4241
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4131
4242
|
if (diag && origDecl) {
|
4132
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.
|
4243
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
|
4133
4244
|
}
|
4134
4245
|
}
|
4135
4246
|
}
|
@@ -4145,7 +4256,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4145
4256
|
}), decl.node.name);
|
4146
4257
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4147
4258
|
if (diag && origDecl) {
|
4148
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.finalMethod(), origDecl.
|
4259
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.finalMethod(), origDecl.uri, origDecl.range);
|
4149
4260
|
}
|
4150
4261
|
}
|
4151
4262
|
}
|
@@ -4166,7 +4277,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4166
4277
|
}), lastDecl.node);
|
4167
4278
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4168
4279
|
if (diag && origDecl) {
|
4169
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.
|
4280
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
|
4170
4281
|
}
|
4171
4282
|
}
|
4172
4283
|
}
|
@@ -4212,7 +4323,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4212
4323
|
}) + diagAddendum.getString(), decls[decls.length - 1].node);
|
4213
4324
|
const origDecl = baseClassMethodType.details.declaration;
|
4214
4325
|
if (diag && origDecl) {
|
4215
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.
|
4326
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
|
4216
4327
|
}
|
4217
4328
|
}
|
4218
4329
|
}
|
@@ -4231,7 +4342,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4231
4342
|
}) + diagAddendum.getString(), decl.node.name);
|
4232
4343
|
const origDecl = baseClassMethodType.details.declaration;
|
4233
4344
|
if (diag && origDecl) {
|
4234
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.
|
4345
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.uri, origDecl.range);
|
4235
4346
|
}
|
4236
4347
|
}
|
4237
4348
|
}
|
@@ -4261,6 +4372,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4261
4372
|
isInvariant = false;
|
4262
4373
|
}
|
4263
4374
|
}
|
4375
|
+
let overriddenTDEntry;
|
4376
|
+
if (baseClass.details.typedDictEntries) {
|
4377
|
+
overriddenTDEntry = baseClass.details.typedDictEntries.get(memberName);
|
4378
|
+
if (overriddenTDEntry === null || overriddenTDEntry === void 0 ? void 0 : overriddenTDEntry.isReadOnly) {
|
4379
|
+
isInvariant = false;
|
4380
|
+
}
|
4381
|
+
}
|
4382
|
+
let overrideTDEntry;
|
4383
|
+
if (childClassType.details.typedDictEntries) {
|
4384
|
+
overrideTDEntry = childClassType.details.typedDictEntries.get(memberName);
|
4385
|
+
}
|
4264
4386
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4265
4387
|
if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
|
4266
4388
|
/* destTypeVarContext */ undefined,
|
@@ -4279,7 +4401,32 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4279
4401
|
}) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
|
4280
4402
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4281
4403
|
if (diag && origDecl) {
|
4282
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.
|
4404
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
|
4405
|
+
}
|
4406
|
+
}
|
4407
|
+
else if (overriddenTDEntry && overrideTDEntry) {
|
4408
|
+
// Make sure the required/not-required attribute is compatible.
|
4409
|
+
let isRequiredCompatible = true;
|
4410
|
+
if (overriddenTDEntry.isReadOnly) {
|
4411
|
+
// If the read-only flag is set, a not-required field can be overridden
|
4412
|
+
// by a required field, but not vice versa.
|
4413
|
+
isRequiredCompatible = overrideTDEntry.isRequired || !overriddenTDEntry.isRequired;
|
4414
|
+
}
|
4415
|
+
else {
|
4416
|
+
isRequiredCompatible = overrideTDEntry.isRequired === overriddenTDEntry.isRequired;
|
4417
|
+
}
|
4418
|
+
if (!isRequiredCompatible) {
|
4419
|
+
const message = overrideTDEntry.isRequired
|
4420
|
+
? localize_1.Localizer.Diagnostic.typedDictFieldRequiredRedefinition
|
4421
|
+
: localize_1.Localizer.Diagnostic.typedDictFieldNotRequiredRedefinition;
|
4422
|
+
this._evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(lastDecl.node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, message().format({ name: memberName }), lastDecl.node);
|
4423
|
+
}
|
4424
|
+
// Make sure that the derived class isn't marking a previously writable
|
4425
|
+
// entry as read-only.
|
4426
|
+
if (!overriddenTDEntry.isReadOnly && overrideTDEntry.isReadOnly) {
|
4427
|
+
this._evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(lastDecl.node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typedDictFieldReadOnlyRedefinition().format({
|
4428
|
+
name: memberName,
|
4429
|
+
}), lastDecl.node);
|
4283
4430
|
}
|
4284
4431
|
}
|
4285
4432
|
// Verify that there is not a Final mismatch.
|
@@ -4291,7 +4438,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4291
4438
|
className: baseClass.details.name,
|
4292
4439
|
}), lastDecl.node);
|
4293
4440
|
if (diag) {
|
4294
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.
|
4441
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.uri, overrideFinalVarDecl.range);
|
4295
4442
|
}
|
4296
4443
|
}
|
4297
4444
|
// Verify that a class variable isn't overriding an instance
|
@@ -4321,7 +4468,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4321
4468
|
}), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
|
4322
4469
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4323
4470
|
if (diag && origDecl) {
|
4324
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.
|
4471
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), origDecl.uri, origDecl.range);
|
4325
4472
|
}
|
4326
4473
|
}
|
4327
4474
|
}
|