@zzzen/pyright-internal 1.2.0-dev.20260809 → 1.2.0-dev.20260823
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/analyzerNodeInfo.d.ts +119 -24
- package/dist/analyzer/analyzerNodeInfo.js +408 -89
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.d.ts +6 -3
- package/dist/analyzer/binder.js +157 -70
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +5 -2
- package/dist/analyzer/checker.js +92 -34
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +2 -1
- package/dist/analyzer/codeFlowEngine.js +12 -10
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.d.ts +2 -1
- package/dist/analyzer/codeFlowUtils.js +2 -3
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +47 -7
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +18 -8
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.d.ts +6 -4
- package/dist/analyzer/dataClasses.js +119 -75
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +2 -1
- package/dist/analyzer/declarationUtils.js +2 -2
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +5 -4
- package/dist/analyzer/decorators.js +38 -21
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.d.ts +5 -4
- package/dist/analyzer/enums.js +11 -10
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -1
- package/dist/analyzer/importResolver.js +5 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +3 -1
- package/dist/analyzer/importStatementUtils.js +14 -7
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.d.ts +2 -1
- package/dist/analyzer/namedTuples.js +3 -4
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +3 -2
- package/dist/analyzer/operations.js +8 -8
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +2 -2
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +13 -11
- package/dist/analyzer/parseTreeUtils.js +62 -36
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.d.ts +7 -2
- package/dist/analyzer/parseTreeWalker.js +29 -175
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +4 -3
- package/dist/analyzer/patternMatching.js +47 -43
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -0
- package/dist/analyzer/program.js +235 -29
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +4 -3
- package/dist/analyzer/properties.js +7 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -2
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/scope.d.ts +3 -0
- package/dist/analyzer/scope.js +10 -0
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/scopeUtils.d.ts +4 -3
- package/dist/analyzer/scopeUtils.js +8 -8
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/sentinel.d.ts +2 -1
- package/dist/analyzer/sentinel.js +2 -3
- package/dist/analyzer/sentinel.js.map +1 -1
- package/dist/analyzer/service.js +28 -10
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceEnumerator.d.ts +5 -0
- package/dist/analyzer/sourceEnumerator.js +57 -3
- package/dist/analyzer/sourceEnumerator.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +12 -6
- package/dist/analyzer/sourceFile.js +73 -50
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
- package/dist/analyzer/sourceFileInfoUtils.js +8 -0
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +4 -1
- package/dist/analyzer/sourceMapper.js +14 -8
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +4 -1
- package/dist/analyzer/symbol.js +8 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/testWalker.js +2 -1
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +2 -1
- package/dist/analyzer/tracePrinter.js +2 -2
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/tuples.d.ts +3 -2
- package/dist/analyzer/tuples.js +5 -5
- package/dist/analyzer/tuples.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +6 -2
- package/dist/analyzer/typeCacheUtils.js +16 -37
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
- package/dist/analyzer/typeDocStringUtils.js +229 -132
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -0
- package/dist/analyzer/typeEvaluator.js +1280 -302
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +3 -2
- package/dist/analyzer/typeGuards.js +37 -33
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +12 -9
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +3 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +4 -3
- package/dist/analyzer/typedDicts.js +15 -14
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +11 -1
- package/dist/analyzer/types.js +48 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/collectionUtils.js +15 -6
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -0
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +4 -1
- package/dist/common/configOptions.js +68 -12
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/envVarUtils.d.ts +1 -0
- package/dist/common/envVarUtils.js +41 -10
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +3 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/extraPathGlob.d.ts +12 -0
- package/dist/common/extraPathGlob.js +315 -0
- package/dist/common/extraPathGlob.js.map +1 -0
- package/dist/common/host.d.ts +2 -0
- package/dist/common/host.js.map +1 -1
- package/dist/common/languageServerInterface.d.ts +2 -1
- package/dist/common/languageServerInterface.js.map +1 -1
- package/dist/common/pathConsts.d.ts +1 -0
- package/dist/common/pathConsts.js +11 -1
- package/dist/common/pathConsts.js.map +1 -1
- package/dist/common/processUtils.d.ts +4 -2
- package/dist/common/processUtils.js +3 -0
- package/dist/common/processUtils.js.map +1 -1
- package/dist/common/stringUtils.d.ts +6 -0
- package/dist/common/stringUtils.js +87 -5
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.d.ts +3 -1
- package/dist/common/textEditTracker.js +8 -6
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRangeCollection.d.ts +1 -0
- package/dist/common/textRangeCollection.js +32 -1
- package/dist/common/textRangeCollection.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +3 -0
- package/dist/common/uri/uriUtils.js +65 -15
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/fileSystemMapping.d.ts +10 -0
- package/dist/fileSystemMapping.js +176 -0
- package/dist/fileSystemMapping.js.map +1 -0
- package/dist/languageService/analyzerServiceExecutor.js +2 -1
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -0
- package/dist/languageService/autoImporter.js +32 -5
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +7 -0
- package/dist/languageService/callHierarchyProvider.js +97 -11
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +30 -8
- package/dist/languageService/completionProvider.js +298 -93
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +7 -6
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +2 -1
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +3 -1
- package/dist/languageService/documentSymbolCollector.js +78 -14
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +3 -2
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
- package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +2 -1
- package/dist/languageService/hoverProvider.js +48 -16
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.d.ts +3 -1
- package/dist/languageService/importSorter.js +4 -2
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/importStatementCandidates.js +4 -2
- package/dist/languageService/importStatementCandidates.js.map +1 -1
- package/dist/languageService/quickActions.js +2 -1
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.js +12 -5
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.d.ts +3 -0
- package/dist/languageService/signatureHelpProvider.js +56 -18
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +2 -1
- package/dist/languageService/symbolIndexer.js +7 -7
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +1 -1
- package/dist/languageService/tooltipUtils.js +103 -35
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +3 -2
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +12 -0
- package/dist/localization/localize.js +14 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +11 -0
- package/dist/localization/package.nls.de.json +11 -0
- package/dist/localization/package.nls.en-us.json +18 -0
- package/dist/localization/package.nls.es.json +11 -0
- package/dist/localization/package.nls.fr.json +11 -0
- package/dist/localization/package.nls.it.json +11 -0
- package/dist/localization/package.nls.ja.json +11 -0
- package/dist/localization/package.nls.ko.json +11 -0
- package/dist/localization/package.nls.pl.json +11 -0
- package/dist/localization/package.nls.pt-br.json +11 -0
- package/dist/localization/package.nls.qps-ploc.json +11 -0
- package/dist/localization/package.nls.ru.json +11 -0
- package/dist/localization/package.nls.tr.json +11 -0
- package/dist/localization/package.nls.zh-cn.json +12 -1
- package/dist/localization/package.nls.zh-tw.json +13 -2
- package/dist/parser/parseNodes.d.ts +85 -80
- package/dist/parser/parseNodes.js +182 -159
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parseTreeUtils.d.ts +3 -0
- package/dist/parser/parseTreeUtils.js +209 -0
- package/dist/parser/parseTreeUtils.js.map +1 -0
- package/dist/parser/parser.d.ts +16 -6
- package/dist/parser/parser.js +210 -144
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringAnnotationInfo.d.ts +16 -0
- package/dist/parser/stringAnnotationInfo.js +26 -0
- package/dist/parser/stringAnnotationInfo.js.map +1 -0
- package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
- package/dist/readonlyAugmentedFileSystem.js +17 -144
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
- package/dist/tests/analyzerNodeInfo.test.js +113 -0
- package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
- package/dist/tests/collectionUtils.test.js +46 -0
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/completions.test.js +34 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +131 -6
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/extraPathGlob.test.d.ts +1 -0
- package/dist/tests/extraPathGlob.test.js +434 -0
- package/dist/tests/extraPathGlob.test.js.map +1 -0
- package/dist/tests/fileSystemMapping.test.d.ts +1 -0
- package/dist/tests/fileSystemMapping.test.js +458 -0
- package/dist/tests/fileSystemMapping.test.js.map +1 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +1 -1
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/hoverProvider.test.js +38 -0
- package/dist/tests/hoverProvider.test.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +6 -3
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +38 -0
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +88 -0
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +60 -3
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +23 -0
- package/dist/tests/positionUtils.test.js.map +1 -1
- package/dist/tests/pyrightFileSystem.test.js +41 -0
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/service.test.js +77 -0
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
- package/dist/tests/stringUtils.test.js +84 -0
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
- package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
- package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
- package/dist/tests/testUtils.d.ts +2 -0
- package/dist/tests/testUtils.js +7 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +2 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/textRangeCollection.test.d.ts +1 -0
- package/dist/tests/textRangeCollection.test.js +137 -0
- package/dist/tests/textRangeCollection.test.js.map +1 -0
- package/dist/tests/typeCacheUtils.test.d.ts +1 -0
- package/dist/tests/typeCacheUtils.test.js +69 -0
- package/dist/tests/typeCacheUtils.test.js.map +1 -0
- package/dist/tests/typeEvaluator1.test.js +24 -3
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +8 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +33 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +29 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +318 -4
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
- package/dist/tests/typeServer/typeCache.test.js +69 -0
- package/dist/tests/typeServer/typeCache.test.js.map +1 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
- package/dist/tests/types.test.d.ts +1 -0
- package/dist/{analyzer/parseTreeCleaner.js → tests/types.test.js} +23 -25
- package/dist/tests/types.test.js.map +1 -0
- package/dist/tests/uri.test.js +51 -0
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
- package/dist/typeServer/notebookDocumentHandler.js +16 -6
- package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
- package/dist/typeServer/programWrapper.d.ts +1 -0
- package/dist/typeServer/programWrapper.js +28 -15
- package/dist/typeServer/programWrapper.js.map +1 -1
- package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
- package/dist/typeServer/protocol/tspSupplemental.js +2 -2
- package/dist/typeServer/server.d.ts +13 -2
- package/dist/typeServer/server.js +36 -23
- package/dist/typeServer/server.js.map +1 -1
- package/dist/typeServer/typeCache.d.ts +8 -4
- package/dist/typeServer/typeCache.js +33 -5
- package/dist/typeServer/typeCache.js.map +1 -1
- package/dist/typeServer/typeEvalUtils.d.ts +2 -1
- package/dist/typeServer/typeEvalUtils.js +7 -3
- package/dist/typeServer/typeEvalUtils.js.map +1 -1
- package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
- package/dist/typeServer/typeServerFileSystem.js +16 -12
- package/dist/typeServer/typeServerFileSystem.js.map +1 -1
- package/package.json +7 -5
- package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
- package/dist/analyzer/parseTreeCleaner.js.map +0 -1
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { AssertNode, AssignmentExpressionNode, AssignmentNode, AugmentedAssignmentNode, AwaitNode, BinaryOperationNode, CallNode, CaseNode, ClassNode, ComprehensionIfNode, ComprehensionNode, DelNode, DictionaryNode, ErrorNode, ExceptNode, ForNode, FormatStringNode, FunctionNode, GlobalNode, IfNode, ImportAsNode, ImportFromAsNode, ImportFromNode, IndexNode, LambdaNode, ListNode, MatchNode, MemberAccessNode, ModuleNameNode, NameNode, NonlocalNode, ParseNode, PatternClassNode, RaiseNode, ReturnNode, SetNode, SliceNode, StatementListNode, StringListNode, SuiteNode, TernaryNode, TryNode, TupleNode, TypeAliasNode, TypeAnnotationNode, TypeParameterListNode, TypeParameterNode, UnaryOperationNode, UnpackNode, WhileNode, WithNode, YieldFromNode, YieldNode } from '../parser/parseNodes';
|
|
2
2
|
import { ParserOutput } from '../parser/parser';
|
|
3
|
+
import * as AnalyzerNodeInfo from './analyzerNodeInfo';
|
|
3
4
|
import { ImportResolver } from './importResolver';
|
|
4
5
|
import { ParseTreeWalker } from './parseTreeWalker';
|
|
5
6
|
import { TypeEvaluator } from './typeEvaluatorTypes';
|
|
6
7
|
export declare class Checker extends ParseTreeWalker {
|
|
7
8
|
private _importResolver;
|
|
8
9
|
private _evaluator;
|
|
9
|
-
private _dependentFiles
|
|
10
|
+
private _dependentFiles;
|
|
10
11
|
private readonly _moduleNode;
|
|
11
12
|
private readonly _fileInfo;
|
|
13
|
+
private readonly _nodeInfo;
|
|
12
14
|
private _isUnboundCheckSuppressed;
|
|
13
15
|
private _scopedNodes;
|
|
14
16
|
private _typeParamLists;
|
|
15
17
|
private _multipartImports;
|
|
16
|
-
constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParserOutput, _dependentFiles
|
|
18
|
+
constructor(_importResolver: ImportResolver, _evaluator: TypeEvaluator, parseResults: ParserOutput, _dependentFiles: ParserOutput[] | undefined, nodeInfoReader: AnalyzerNodeInfo.AnalyzerNodeInfoReader);
|
|
17
19
|
check(): void;
|
|
18
20
|
walk(node: ParseNode): void;
|
|
19
21
|
visitSuite(node: SuiteNode): boolean;
|
|
@@ -132,6 +134,7 @@ export declare class Checker extends ParseTreeWalker {
|
|
|
132
134
|
private _validateProtocolTypeParamVariance;
|
|
133
135
|
private _validateSlotsClassVarConflict;
|
|
134
136
|
private _validateConstructorConsistency;
|
|
137
|
+
private _validateDisjointBaseClass;
|
|
135
138
|
private _validateMultipleInheritanceBaseClasses;
|
|
136
139
|
private _validateMultipleInheritanceCompatibility;
|
|
137
140
|
private _validateMultipleInheritanceOverride;
|
package/dist/analyzer/checker.js
CHANGED
|
@@ -88,8 +88,14 @@ const typeUtils_1 = require("./typeUtils");
|
|
|
88
88
|
// functions to be emitted.
|
|
89
89
|
const isPrintCodeComplexityEnabled = false;
|
|
90
90
|
class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
91
|
-
constructor(_importResolver, _evaluator, parseResults, _dependentFiles) {
|
|
92
|
-
|
|
91
|
+
constructor(_importResolver, _evaluator, parseResults, _dependentFiles, nodeInfoReader) {
|
|
92
|
+
// Forward the reader to the base walker so the structural walk expands both tier-1
|
|
93
|
+
// (parser-derived) and tier-2 (evaluator-discovered, e.g. `cast("Foo", v)`) string
|
|
94
|
+
// annotations. The checker runs after type evaluation, so tier-2 annotations exist by
|
|
95
|
+
// the time it descends; without the reader it would silently skip tier-2 forward-ref
|
|
96
|
+
// subtrees and drop checker-only diagnostics (reportDeprecated, reportPrivateUsage, ...)
|
|
97
|
+
// for symbols referenced only inside an evaluator-discovered forward reference.
|
|
98
|
+
super(nodeInfoReader);
|
|
93
99
|
this._importResolver = _importResolver;
|
|
94
100
|
this._evaluator = _evaluator;
|
|
95
101
|
this._dependentFiles = _dependentFiles;
|
|
@@ -101,13 +107,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
101
107
|
this._typeParamLists = [];
|
|
102
108
|
// A list of all visited multipart import statements.
|
|
103
109
|
this._multipartImports = [];
|
|
110
|
+
this._nodeInfo = AnalyzerNodeInfo.createAnalyzerNodeInfoAccessor(nodeInfoReader);
|
|
104
111
|
this._moduleNode = parseResults.parseTree;
|
|
105
|
-
this._fileInfo =
|
|
112
|
+
this._fileInfo = this._nodeInfo.getFileInfo(this._moduleNode);
|
|
106
113
|
}
|
|
107
114
|
check() {
|
|
108
115
|
this._scopedNodes.push(this._moduleNode);
|
|
109
116
|
// Report code complexity issues for the module.
|
|
110
|
-
const codeComplexity =
|
|
117
|
+
const codeComplexity = this._nodeInfo.getCodeFlowComplexity(this._moduleNode);
|
|
111
118
|
if (isPrintCodeComplexityEnabled) {
|
|
112
119
|
console.log(`Code complexity of module ${this._fileInfo.fileUri.toUserVisibleString()} is ${codeComplexity.toString()}`);
|
|
113
120
|
}
|
|
@@ -116,7 +123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
116
123
|
}
|
|
117
124
|
this._walkStatementsAndReportUnreachable(this._moduleNode.d.statements);
|
|
118
125
|
// Mark symbols accessed by __all__ as accessed.
|
|
119
|
-
const dunderAllInfo =
|
|
126
|
+
const dunderAllInfo = this._nodeInfo.getDunderAllInfo(this._moduleNode);
|
|
120
127
|
if (dunderAllInfo) {
|
|
121
128
|
this._evaluator.markNamesAccessed(this._moduleNode, dunderAllInfo.names);
|
|
122
129
|
this._reportUnusedDunderAllSymbols(dunderAllInfo.stringNodes);
|
|
@@ -128,7 +135,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
128
135
|
this._reportDuplicateImports();
|
|
129
136
|
}
|
|
130
137
|
walk(node) {
|
|
131
|
-
if (!
|
|
138
|
+
if (!this._nodeInfo.isCodeUnreachable(node)) {
|
|
132
139
|
super.walk(node);
|
|
133
140
|
}
|
|
134
141
|
else {
|
|
@@ -192,6 +199,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
192
199
|
this._validateBaseClassOverrides(classTypeResult.classType);
|
|
193
200
|
this._validateTypedDictOverrides(classTypeResult.classType);
|
|
194
201
|
this._validateOverloadDecoratorConsistency(classTypeResult.classType);
|
|
202
|
+
this._validateDisjointBaseClass(classTypeResult.classType, node.d.name);
|
|
195
203
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.d.name);
|
|
196
204
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.d.name);
|
|
197
205
|
this._validateConstructorConsistency(classTypeResult.classType, node.d.name);
|
|
@@ -391,7 +399,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
391
399
|
this.walk(param.d.name);
|
|
392
400
|
}
|
|
393
401
|
});
|
|
394
|
-
const codeComplexity =
|
|
402
|
+
const codeComplexity = this._nodeInfo.getCodeFlowComplexity(node);
|
|
395
403
|
const isTooComplexToAnalyze = codeComplexity > typeEvaluator_1.maxCodeComplexity;
|
|
396
404
|
if (isPrintCodeComplexityEnabled) {
|
|
397
405
|
console.log(`Code complexity of function ${node.d.name.d.value} is ${codeComplexity.toString()}`);
|
|
@@ -423,7 +431,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
423
431
|
// if there is a '__getattr__' function defined when in strict mode.
|
|
424
432
|
// This signifies an incomplete stub file that obscures type errors.
|
|
425
433
|
if (this._fileInfo.isStubFile && node.d.name.d.value === '__getattr__') {
|
|
426
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
434
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
427
435
|
if (scope?.type === 4 /* ScopeType.Module */) {
|
|
428
436
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.LocMessage.stubUsesGetAttr(), node.d.name);
|
|
429
437
|
}
|
|
@@ -586,7 +594,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
586
594
|
// statement is not allowed to have an argument. A syntax error occurs
|
|
587
595
|
// at runtime in this case.
|
|
588
596
|
if (enclosingFunctionNode?.d.isAsync && node.d.expr) {
|
|
589
|
-
const functionDecl =
|
|
597
|
+
const functionDecl = this._nodeInfo.getDeclaration(enclosingFunctionNode);
|
|
590
598
|
if (functionDecl?.type === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
|
|
591
599
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.returnInAsyncGenerator(), node.d.expr);
|
|
592
600
|
}
|
|
@@ -597,7 +605,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
597
605
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.noReturnContainsReturn(), node);
|
|
598
606
|
}
|
|
599
607
|
else {
|
|
600
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
608
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
601
609
|
declaredReturnType = this._evaluator.stripTypeGuard(declaredReturnType);
|
|
602
610
|
let adjReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
603
611
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
|
@@ -740,7 +748,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
740
748
|
if (node.d.leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
|
741
749
|
const annotationType = this._evaluator.getTypeOfAnnotation(node.d.leftExpr.d.annotation);
|
|
742
750
|
if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
|
|
743
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
751
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
744
752
|
if (scope) {
|
|
745
753
|
if (scope.type !== 3 /* ScopeType.Class */ &&
|
|
746
754
|
scope.type !== 4 /* ScopeType.Module */ &&
|
|
@@ -900,7 +908,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
900
908
|
}
|
|
901
909
|
}
|
|
902
910
|
}
|
|
903
|
-
if (node.
|
|
911
|
+
if (AnalyzerNodeInfo.getStringAnnotation(node, AnalyzerNodeInfo.getInfoReader(this._evaluator))) {
|
|
904
912
|
this._evaluator.getType(node);
|
|
905
913
|
}
|
|
906
914
|
if (node.d.strings.length > 1 && !node.d.hasParens) {
|
|
@@ -994,7 +1002,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
994
1002
|
}
|
|
995
1003
|
else {
|
|
996
1004
|
this._evaluator.evaluateTypesForStatement(node);
|
|
997
|
-
const importInfo =
|
|
1005
|
+
const importInfo = this._nodeInfo.getImportInfo(node.d.module);
|
|
998
1006
|
if (importInfo &&
|
|
999
1007
|
importInfo.isImportFound &&
|
|
1000
1008
|
importInfo.importType !== 2 /* ImportType.Local */ &&
|
|
@@ -1046,7 +1054,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1046
1054
|
if (this._fileInfo.isStubFile) {
|
|
1047
1055
|
return false;
|
|
1048
1056
|
}
|
|
1049
|
-
const importResult =
|
|
1057
|
+
const importResult = this._nodeInfo.getImportInfo(node);
|
|
1050
1058
|
(0, debug_1.assert)(importResult !== undefined);
|
|
1051
1059
|
this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node);
|
|
1052
1060
|
return false;
|
|
@@ -1087,7 +1095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1087
1095
|
return false;
|
|
1088
1096
|
}
|
|
1089
1097
|
visitTypeAlias(node) {
|
|
1090
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
1098
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
1091
1099
|
if (scope) {
|
|
1092
1100
|
if (scope.type !== 3 /* ScopeType.Class */ && scope.type !== 4 /* ScopeType.Module */ && scope.type !== 5 /* ScopeType.Builtin */) {
|
|
1093
1101
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeAliasStatementBadScope(), node.d.name);
|
|
@@ -1577,7 +1585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1577
1585
|
const nameType = this._evaluator.getType(nameNode);
|
|
1578
1586
|
if (nameType && (0, types_1.isTypeVar)(nameType) && !types_1.TypeVarType.isSelf(nameType)) {
|
|
1579
1587
|
// Does this name refer to a TypeVar that is scoped to this function?
|
|
1580
|
-
if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
|
|
1588
|
+
if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node, this._nodeInfo)) {
|
|
1581
1589
|
// We exempt constrained TypeVars, TypeVars that are type arguments of
|
|
1582
1590
|
// other types, and ParamSpecs. There are legitimate uses for singleton
|
|
1583
1591
|
// instances in these particular cases.
|
|
@@ -1863,14 +1871,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1863
1871
|
}
|
|
1864
1872
|
const functionNode = functionType.shared.declaration?.node;
|
|
1865
1873
|
if (functionNode) {
|
|
1866
|
-
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode);
|
|
1874
|
+
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode, this._nodeInfo);
|
|
1867
1875
|
functionType = (0, typeUtils_1.makeTypeVarsBound)(functionType, liveTypeVars);
|
|
1868
1876
|
}
|
|
1869
1877
|
// Use the parent node of the declaration in this case so we don't transform
|
|
1870
1878
|
// function-local type variables into bound type variables.
|
|
1871
1879
|
const prevOverloadNode = prevOverload.shared.declaration?.node?.parent;
|
|
1872
1880
|
if (prevOverloadNode) {
|
|
1873
|
-
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode);
|
|
1881
|
+
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode, this._nodeInfo);
|
|
1874
1882
|
prevOverload = (0, typeUtils_1.makeTypeVarsBound)(prevOverload, liveTypeVars);
|
|
1875
1883
|
}
|
|
1876
1884
|
return this._evaluator.assignType(functionType, prevOverload,
|
|
@@ -1887,12 +1895,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1887
1895
|
let overloadBound = overload;
|
|
1888
1896
|
const implNode = implementation.shared.declaration?.node?.parent;
|
|
1889
1897
|
if (implNode) {
|
|
1890
|
-
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode);
|
|
1898
|
+
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode, this._nodeInfo);
|
|
1891
1899
|
implBound = (0, typeUtils_1.makeTypeVarsBound)(implementation, liveScopeIds);
|
|
1892
1900
|
}
|
|
1893
1901
|
const overloadNode = overload.shared.declaration?.node;
|
|
1894
1902
|
if (overloadNode) {
|
|
1895
|
-
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode);
|
|
1903
|
+
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode, this._nodeInfo);
|
|
1896
1904
|
overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
|
|
1897
1905
|
}
|
|
1898
1906
|
// First check the parameters to see if they are assignable.
|
|
@@ -2085,7 +2093,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2085
2093
|
if (this._fileInfo.diagnosticRuleSet.reportUnsupportedDunderAll === 'none') {
|
|
2086
2094
|
return;
|
|
2087
2095
|
}
|
|
2088
|
-
const moduleScope =
|
|
2096
|
+
const moduleScope = this._nodeInfo.getScope(this._moduleNode);
|
|
2089
2097
|
if (!moduleScope) {
|
|
2090
2098
|
return;
|
|
2091
2099
|
}
|
|
@@ -2096,9 +2104,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2096
2104
|
});
|
|
2097
2105
|
}
|
|
2098
2106
|
_validateSymbolTables() {
|
|
2099
|
-
const dependentFileInfo = this._dependentFiles?.map((p) =>
|
|
2107
|
+
const dependentFileInfo = this._dependentFiles?.map((p) => this._nodeInfo.getFileInfo(p.parseTree));
|
|
2100
2108
|
for (const scopedNode of this._scopedNodes) {
|
|
2101
|
-
const scope =
|
|
2109
|
+
const scope = this._nodeInfo.getScope(scopedNode);
|
|
2102
2110
|
if (scope) {
|
|
2103
2111
|
scope.symbolTable.forEach((symbol, name) => {
|
|
2104
2112
|
this._conditionallyReportUnusedSymbol(name, symbol, scope.type, dependentFileInfo);
|
|
@@ -2115,7 +2123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2115
2123
|
// Report unaccessed type parameters.
|
|
2116
2124
|
const accessedSymbolSet = this._fileInfo.accessedSymbolSet;
|
|
2117
2125
|
for (const paramList of this._typeParamLists) {
|
|
2118
|
-
const typeParamScope =
|
|
2126
|
+
const typeParamScope = this._nodeInfo.getScope(paramList);
|
|
2119
2127
|
for (const param of paramList.d.params) {
|
|
2120
2128
|
const symbol = typeParamScope?.symbolTable.get(param.d.name.d.value);
|
|
2121
2129
|
if (!symbol) {
|
|
@@ -2662,6 +2670,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2662
2670
|
if (this._fileInfo.isStubFile) {
|
|
2663
2671
|
return;
|
|
2664
2672
|
}
|
|
2673
|
+
// The presence of a decorator can change how the class is used (e.g. it
|
|
2674
|
+
// may be registered or consumed through a decorator side effect), so back
|
|
2675
|
+
// off from reporting it as unaccessed if any decorator is present.
|
|
2676
|
+
if (decl.node.d.decorators.length > 0) {
|
|
2677
|
+
return;
|
|
2678
|
+
}
|
|
2665
2679
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedClass;
|
|
2666
2680
|
nameNode = decl.node.d.name;
|
|
2667
2681
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
|
|
@@ -2676,6 +2690,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2676
2690
|
if (this._fileInfo.isStubFile) {
|
|
2677
2691
|
return;
|
|
2678
2692
|
}
|
|
2693
|
+
// The presence of a decorator can change how the function is used (e.g. a
|
|
2694
|
+
// Flask `@app.route(...)` handler is registered via a decorator side effect),
|
|
2695
|
+
// so back off from reporting it as unaccessed if any decorator is present.
|
|
2696
|
+
if (decl.node.d.decorators.length > 0) {
|
|
2697
|
+
return;
|
|
2698
|
+
}
|
|
2679
2699
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedFunction;
|
|
2680
2700
|
nameNode = decl.node.d.name;
|
|
2681
2701
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
|
|
@@ -2785,10 +2805,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2785
2805
|
if (this._fileInfo.diagnosticRuleSet.reportUnnecessaryIsInstance !== 'none') {
|
|
2786
2806
|
const narrowedTypeNegative = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
|
|
2787
2807
|
/* isTypeIsCheck */ false,
|
|
2788
|
-
/* isPositiveTest */ false, node);
|
|
2808
|
+
/* isPositiveTest */ false, node, this._nodeInfo);
|
|
2789
2809
|
const narrowedTypePositive = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
|
|
2790
2810
|
/* isTypeIsCheck */ false,
|
|
2791
|
-
/* isPositiveTest */ true, node);
|
|
2811
|
+
/* isPositiveTest */ true, node, this._nodeInfo);
|
|
2792
2812
|
const isAlwaysTrue = (0, types_1.isNever)(narrowedTypeNegative);
|
|
2793
2813
|
const isNeverTrue = (0, types_1.isNever)(narrowedTypePositive);
|
|
2794
2814
|
if (isAlwaysTrue || isNeverTrue) {
|
|
@@ -3126,7 +3146,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3126
3146
|
if (node.parent?.nodeType === 1 /* ParseNodeType.Argument */ && node.parent.d.name === node) {
|
|
3127
3147
|
return;
|
|
3128
3148
|
}
|
|
3129
|
-
if (!
|
|
3149
|
+
if (!this._nodeInfo.isCodeUnreachable(node)) {
|
|
3130
3150
|
const type = this._evaluator.getType(node);
|
|
3131
3151
|
if (type) {
|
|
3132
3152
|
if ((0, types_1.isUnbound)(type)) {
|
|
@@ -3242,7 +3262,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3242
3262
|
// enum class that has already defined values.
|
|
3243
3263
|
_validateEnumClassOverride(node, classType) {
|
|
3244
3264
|
classType.shared.baseClasses.forEach((baseClass, index) => {
|
|
3245
|
-
if ((0, types_1.isClass)(baseClass) && (0, enums_1.isEnumClassWithMembers)(this._evaluator, baseClass)) {
|
|
3265
|
+
if ((0, types_1.isClass)(baseClass) && (0, enums_1.isEnumClassWithMembers)(this._evaluator, baseClass, this._nodeInfo)) {
|
|
3246
3266
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.enumClassOverride().format({ name: baseClass.shared.name }), node.d.arguments[index]);
|
|
3247
3267
|
}
|
|
3248
3268
|
});
|
|
@@ -3254,8 +3274,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3254
3274
|
const emitBadStatementError = (node) => {
|
|
3255
3275
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBadVar(), node);
|
|
3256
3276
|
};
|
|
3277
|
+
const nodeInfo = this._nodeInfo;
|
|
3257
3278
|
function validateStatement(statement) {
|
|
3258
|
-
if (
|
|
3279
|
+
if (nodeInfo.isCodeUnreachable(statement)) {
|
|
3259
3280
|
return;
|
|
3260
3281
|
}
|
|
3261
3282
|
if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
|
|
@@ -3270,7 +3291,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3270
3291
|
return;
|
|
3271
3292
|
}
|
|
3272
3293
|
if (statement.nodeType === 22 /* ParseNodeType.If */) {
|
|
3273
|
-
const conditionValue =
|
|
3294
|
+
const conditionValue = nodeInfo.getStaticConditionValue(statement);
|
|
3274
3295
|
if (conditionValue === undefined) {
|
|
3275
3296
|
emitBadStatementError(statement);
|
|
3276
3297
|
return;
|
|
@@ -3374,7 +3395,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3374
3395
|
if (declaredReturnType) {
|
|
3375
3396
|
this._reportUnknownReturnResult(node, declaredReturnType);
|
|
3376
3397
|
this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
|
|
3377
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
3398
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
3378
3399
|
declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
3379
3400
|
}
|
|
3380
3401
|
// Wrap the declared type in a generator type if the function is a generator.
|
|
@@ -3502,7 +3523,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3502
3523
|
// type checking perspective, if the runtime treats the assignment
|
|
3503
3524
|
// as an enum member but there is a type annotation present, it is
|
|
3504
3525
|
// considered a type checking error.
|
|
3505
|
-
const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name,
|
|
3526
|
+
const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name, this._nodeInfo,
|
|
3506
3527
|
/* ignoreAnnotation */ true);
|
|
3507
3528
|
// Is this symbol a literal instance of the enum class?
|
|
3508
3529
|
if (!symbolType ||
|
|
@@ -3997,6 +4018,42 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3997
4018
|
}
|
|
3998
4019
|
}
|
|
3999
4020
|
}
|
|
4021
|
+
// Verifies that a class has a unique most-derived disjoint base.
|
|
4022
|
+
_validateDisjointBaseClass(classType, errorNode) {
|
|
4023
|
+
if (classType.shared.baseClasses.length < 2) {
|
|
4024
|
+
return;
|
|
4025
|
+
}
|
|
4026
|
+
const candidates = [];
|
|
4027
|
+
for (const baseClass of classType.shared.baseClasses) {
|
|
4028
|
+
if (!(0, types_1.isInstantiableClass)(baseClass)) {
|
|
4029
|
+
// An unknown base may introduce an unknown disjoint base, but it
|
|
4030
|
+
// cannot make two already-incompatible known bases compatible,
|
|
4031
|
+
// so keep collecting the known candidates.
|
|
4032
|
+
continue;
|
|
4033
|
+
}
|
|
4034
|
+
const candidate = types_1.ClassType.getDisjointBase(baseClass);
|
|
4035
|
+
if (!candidate) {
|
|
4036
|
+
// The base class is invalid or its disjoint base is unknown; an
|
|
4037
|
+
// unknown disjoint base cannot relate two otherwise-incompatible
|
|
4038
|
+
// known candidates, so keep collecting the known candidates.
|
|
4039
|
+
continue;
|
|
4040
|
+
}
|
|
4041
|
+
if (!candidates.some((existingCandidate) => types_1.ClassType.isSameGenericClass(existingCandidate, candidate))) {
|
|
4042
|
+
candidates.push(candidate);
|
|
4043
|
+
}
|
|
4044
|
+
}
|
|
4045
|
+
if (candidates.length > 1 && !types_1.ClassType.getMostDerivedDisjointBase(candidates)) {
|
|
4046
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.disjointBaseIncompatible().format({
|
|
4047
|
+
// `object` is a disjoint base but is compatible with every
|
|
4048
|
+
// other disjoint base, so including it in the reported names
|
|
4049
|
+
// would be misleading. Filter it out.
|
|
4050
|
+
bases: candidates
|
|
4051
|
+
.filter((candidate) => !types_1.ClassType.isBuiltIn(candidate, 'object'))
|
|
4052
|
+
.map((candidate) => `"${candidate.shared.name}"`)
|
|
4053
|
+
.join(', '),
|
|
4054
|
+
}), errorNode);
|
|
4055
|
+
}
|
|
4056
|
+
}
|
|
4000
4057
|
// Verifies that classes that have more than one base class do not have
|
|
4001
4058
|
// have conflicting type arguments.
|
|
4002
4059
|
_validateMultipleInheritanceBaseClasses(classType, errorNode) {
|
|
@@ -5262,7 +5319,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5262
5319
|
if (!declaredReturnType) {
|
|
5263
5320
|
return;
|
|
5264
5321
|
}
|
|
5265
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
5322
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
5266
5323
|
declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
5267
5324
|
let generatorType;
|
|
5268
5325
|
if (!enclosingFunctionNode.d.isAsync &&
|
|
@@ -5369,7 +5426,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5369
5426
|
});
|
|
5370
5427
|
}
|
|
5371
5428
|
_reportDuplicateImports() {
|
|
5372
|
-
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode
|
|
5429
|
+
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode,
|
|
5430
|
+
/* includeImplicitImports */ false, this._nodeInfo);
|
|
5373
5431
|
const importModuleMap = new Map();
|
|
5374
5432
|
importStatements.orderedImports.forEach((importStatement) => {
|
|
5375
5433
|
if (importStatement.node.nodeType === 25 /* ParseNodeType.ImportFrom */) {
|