@zzzen/pyright-internal 1.2.0-dev.20260816 → 1.2.0-dev.20260830
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 +123 -24
- package/dist/analyzer/analyzerNodeInfo.js +429 -89
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +2 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +4 -8
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.d.ts +6 -3
- package/dist/analyzer/binder.js +70 -69
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +4 -2
- package/dist/analyzer/checker.js +86 -59
- 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/constructorTransform.js +8 -0
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/dataClasses.d.ts +5 -4
- package/dist/analyzer/dataClasses.js +30 -59
- 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 +20 -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 +238 -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/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 +3 -2
- package/dist/analyzer/sentinel.js +4 -5
- package/dist/analyzer/sentinel.js.map +1 -1
- package/dist/analyzer/service.d.ts +5 -10
- package/dist/analyzer/service.js +36 -96
- 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 +74 -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/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/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 +418 -229
- 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 +159 -35
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeStubGeneration.d.ts +64 -0
- package/dist/analyzer/typeStubGeneration.js +226 -0
- package/dist/analyzer/typeStubGeneration.js.map +1 -0
- package/dist/analyzer/typeStubMessages.d.ts +4 -0
- package/dist/analyzer/typeStubMessages.js +25 -0
- package/dist/analyzer/typeStubMessages.js.map +1 -0
- package/dist/analyzer/typeStubOutput.d.ts +9 -0
- package/dist/analyzer/typeStubOutput.js +52 -0
- package/dist/analyzer/typeStubOutput.js.map +1 -0
- package/dist/analyzer/typeStubRenderer.d.ts +5 -0
- package/dist/analyzer/{typeStubWriter.js → typeStubRenderer.js} +20 -99
- package/dist/analyzer/typeStubRenderer.js.map +1 -0
- package/dist/analyzer/typeUtils.d.ts +1 -0
- package/dist/analyzer/typeUtils.js +115 -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 +2 -0
- package/dist/analyzer/types.js +84 -58
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +5 -4
- package/dist/backgroundAnalysisBase.js +11 -19
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/commands/createTypeStub.d.ts +2 -6
- package/dist/commands/createTypeStub.js +14 -27
- package/dist/commands/createTypeStub.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 -1
- 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/languageServerBase.d.ts +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +1 -3
- package/dist/languageService/analyzerServiceExecutor.js +10 -29
- 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 +6 -0
- package/dist/localization/localize.js +10 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +15 -0
- package/dist/localization/package.nls.de.json +15 -0
- package/dist/localization/package.nls.en-us.json +5 -0
- package/dist/localization/package.nls.es.json +15 -0
- package/dist/localization/package.nls.fr.json +15 -0
- package/dist/localization/package.nls.it.json +15 -0
- package/dist/localization/package.nls.ja.json +15 -0
- package/dist/localization/package.nls.ko.json +15 -0
- package/dist/localization/package.nls.pl.json +15 -0
- package/dist/localization/package.nls.pt-br.json +15 -0
- package/dist/localization/package.nls.qps-ploc.json +15 -0
- package/dist/localization/package.nls.ru.json +15 -0
- package/dist/localization/package.nls.tr.json +15 -0
- package/dist/localization/package.nls.zh-cn.json +16 -1
- package/dist/localization/package.nls.zh-tw.json +17 -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/pyright.js +30 -17
- package/dist/pyright.js.map +1 -1
- 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 +145 -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 -7
- 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.docFromSrc.stubs-package.fourslash.js +0 -1
- package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js.map +1 -1
- 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/pyrightCli.test.d.ts +1 -0
- package/dist/tests/pyrightCli.test.js +205 -0
- package/dist/tests/pyrightCli.test.js.map +1 -0
- package/dist/tests/pyrightFileSystem.test.js +41 -0
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/service.test.js +183 -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/typeEquality.test.d.ts +1 -0
- package/dist/tests/typeEquality.test.js +95 -0
- package/dist/tests/typeEquality.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/typeEvaluator2.test.js +4 -0
- package/dist/tests/typeEvaluator2.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 +8 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +1 -1
- package/dist/tests/typeEvaluator6.test.js +5 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +4 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +4 -0
- 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/typeStubGeneration.test.d.ts +1 -0
- package/dist/tests/typeStubGeneration.test.js +397 -0
- package/dist/tests/typeStubGeneration.test.js.map +1 -0
- package/dist/tests/typeStubOutput.test.d.ts +1 -0
- package/dist/tests/typeStubOutput.test.js +136 -0
- package/dist/tests/typeStubOutput.test.js.map +1 -0
- package/dist/tests/typeUtils.test.d.ts +1 -0
- package/dist/tests/typeUtils.test.js +133 -0
- package/dist/tests/typeUtils.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/typeGuards.js +3 -4
- package/dist/typeServer/typeGuards.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 +0 -65
- package/dist/analyzer/parseTreeCleaner.js.map +0 -1
- package/dist/analyzer/typeStubWriter.d.ts +0 -17
- package/dist/analyzer/typeStubWriter.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;
|
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 {
|
|
@@ -392,7 +399,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
392
399
|
this.walk(param.d.name);
|
|
393
400
|
}
|
|
394
401
|
});
|
|
395
|
-
const codeComplexity =
|
|
402
|
+
const codeComplexity = this._nodeInfo.getCodeFlowComplexity(node);
|
|
396
403
|
const isTooComplexToAnalyze = codeComplexity > typeEvaluator_1.maxCodeComplexity;
|
|
397
404
|
if (isPrintCodeComplexityEnabled) {
|
|
398
405
|
console.log(`Code complexity of function ${node.d.name.d.value} is ${codeComplexity.toString()}`);
|
|
@@ -424,7 +431,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
424
431
|
// if there is a '__getattr__' function defined when in strict mode.
|
|
425
432
|
// This signifies an incomplete stub file that obscures type errors.
|
|
426
433
|
if (this._fileInfo.isStubFile && node.d.name.d.value === '__getattr__') {
|
|
427
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
434
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
428
435
|
if (scope?.type === 4 /* ScopeType.Module */) {
|
|
429
436
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.LocMessage.stubUsesGetAttr(), node.d.name);
|
|
430
437
|
}
|
|
@@ -587,7 +594,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
587
594
|
// statement is not allowed to have an argument. A syntax error occurs
|
|
588
595
|
// at runtime in this case.
|
|
589
596
|
if (enclosingFunctionNode?.d.isAsync && node.d.expr) {
|
|
590
|
-
const functionDecl =
|
|
597
|
+
const functionDecl = this._nodeInfo.getDeclaration(enclosingFunctionNode);
|
|
591
598
|
if (functionDecl?.type === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
|
|
592
599
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.returnInAsyncGenerator(), node.d.expr);
|
|
593
600
|
}
|
|
@@ -598,7 +605,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
598
605
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.noReturnContainsReturn(), node);
|
|
599
606
|
}
|
|
600
607
|
else {
|
|
601
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
608
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
602
609
|
declaredReturnType = this._evaluator.stripTypeGuard(declaredReturnType);
|
|
603
610
|
let adjReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
604
611
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
|
@@ -741,7 +748,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
741
748
|
if (node.d.leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
|
742
749
|
const annotationType = this._evaluator.getTypeOfAnnotation(node.d.leftExpr.d.annotation);
|
|
743
750
|
if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
|
|
744
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
751
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
745
752
|
if (scope) {
|
|
746
753
|
if (scope.type !== 3 /* ScopeType.Class */ &&
|
|
747
754
|
scope.type !== 4 /* ScopeType.Module */ &&
|
|
@@ -901,7 +908,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
901
908
|
}
|
|
902
909
|
}
|
|
903
910
|
}
|
|
904
|
-
if (node.
|
|
911
|
+
if (AnalyzerNodeInfo.getStringAnnotation(node, AnalyzerNodeInfo.getInfoReader(this._evaluator))) {
|
|
905
912
|
this._evaluator.getType(node);
|
|
906
913
|
}
|
|
907
914
|
if (node.d.strings.length > 1 && !node.d.hasParens) {
|
|
@@ -995,7 +1002,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
995
1002
|
}
|
|
996
1003
|
else {
|
|
997
1004
|
this._evaluator.evaluateTypesForStatement(node);
|
|
998
|
-
const importInfo =
|
|
1005
|
+
const importInfo = this._nodeInfo.getImportInfo(node.d.module);
|
|
999
1006
|
if (importInfo &&
|
|
1000
1007
|
importInfo.isImportFound &&
|
|
1001
1008
|
importInfo.importType !== 2 /* ImportType.Local */ &&
|
|
@@ -1047,7 +1054,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1047
1054
|
if (this._fileInfo.isStubFile) {
|
|
1048
1055
|
return false;
|
|
1049
1056
|
}
|
|
1050
|
-
const importResult =
|
|
1057
|
+
const importResult = this._nodeInfo.getImportInfo(node);
|
|
1051
1058
|
(0, debug_1.assert)(importResult !== undefined);
|
|
1052
1059
|
this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node);
|
|
1053
1060
|
return false;
|
|
@@ -1088,7 +1095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1088
1095
|
return false;
|
|
1089
1096
|
}
|
|
1090
1097
|
visitTypeAlias(node) {
|
|
1091
|
-
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
|
1098
|
+
const scope = (0, scopeUtils_1.getScopeForNode)(node, this._nodeInfo);
|
|
1092
1099
|
if (scope) {
|
|
1093
1100
|
if (scope.type !== 3 /* ScopeType.Class */ && scope.type !== 4 /* ScopeType.Module */ && scope.type !== 5 /* ScopeType.Builtin */) {
|
|
1094
1101
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeAliasStatementBadScope(), node.d.name);
|
|
@@ -1578,7 +1585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1578
1585
|
const nameType = this._evaluator.getType(nameNode);
|
|
1579
1586
|
if (nameType && (0, types_1.isTypeVar)(nameType) && !types_1.TypeVarType.isSelf(nameType)) {
|
|
1580
1587
|
// Does this name refer to a TypeVar that is scoped to this function?
|
|
1581
|
-
if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
|
|
1588
|
+
if (nameType.priv.scopeId === ParseTreeUtils.getScopeIdForNode(node, this._nodeInfo)) {
|
|
1582
1589
|
// We exempt constrained TypeVars, TypeVars that are type arguments of
|
|
1583
1590
|
// other types, and ParamSpecs. There are legitimate uses for singleton
|
|
1584
1591
|
// instances in these particular cases.
|
|
@@ -1864,14 +1871,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1864
1871
|
}
|
|
1865
1872
|
const functionNode = functionType.shared.declaration?.node;
|
|
1866
1873
|
if (functionNode) {
|
|
1867
|
-
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode);
|
|
1874
|
+
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(functionNode, this._nodeInfo);
|
|
1868
1875
|
functionType = (0, typeUtils_1.makeTypeVarsBound)(functionType, liveTypeVars);
|
|
1869
1876
|
}
|
|
1870
1877
|
// Use the parent node of the declaration in this case so we don't transform
|
|
1871
1878
|
// function-local type variables into bound type variables.
|
|
1872
1879
|
const prevOverloadNode = prevOverload.shared.declaration?.node?.parent;
|
|
1873
1880
|
if (prevOverloadNode) {
|
|
1874
|
-
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode);
|
|
1881
|
+
const liveTypeVars = ParseTreeUtils.getTypeVarScopesForNode(prevOverloadNode, this._nodeInfo);
|
|
1875
1882
|
prevOverload = (0, typeUtils_1.makeTypeVarsBound)(prevOverload, liveTypeVars);
|
|
1876
1883
|
}
|
|
1877
1884
|
return this._evaluator.assignType(functionType, prevOverload,
|
|
@@ -1888,12 +1895,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1888
1895
|
let overloadBound = overload;
|
|
1889
1896
|
const implNode = implementation.shared.declaration?.node?.parent;
|
|
1890
1897
|
if (implNode) {
|
|
1891
|
-
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode);
|
|
1898
|
+
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(implNode, this._nodeInfo);
|
|
1892
1899
|
implBound = (0, typeUtils_1.makeTypeVarsBound)(implementation, liveScopeIds);
|
|
1893
1900
|
}
|
|
1894
1901
|
const overloadNode = overload.shared.declaration?.node;
|
|
1895
1902
|
if (overloadNode) {
|
|
1896
|
-
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode);
|
|
1903
|
+
const liveScopeIds = ParseTreeUtils.getTypeVarScopesForNode(overloadNode, this._nodeInfo);
|
|
1897
1904
|
overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
|
|
1898
1905
|
}
|
|
1899
1906
|
// First check the parameters to see if they are assignable.
|
|
@@ -2086,7 +2093,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2086
2093
|
if (this._fileInfo.diagnosticRuleSet.reportUnsupportedDunderAll === 'none') {
|
|
2087
2094
|
return;
|
|
2088
2095
|
}
|
|
2089
|
-
const moduleScope =
|
|
2096
|
+
const moduleScope = this._nodeInfo.getScope(this._moduleNode);
|
|
2090
2097
|
if (!moduleScope) {
|
|
2091
2098
|
return;
|
|
2092
2099
|
}
|
|
@@ -2097,9 +2104,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2097
2104
|
});
|
|
2098
2105
|
}
|
|
2099
2106
|
_validateSymbolTables() {
|
|
2100
|
-
const dependentFileInfo = this._dependentFiles?.map((p) =>
|
|
2107
|
+
const dependentFileInfo = this._dependentFiles?.map((p) => this._nodeInfo.getFileInfo(p.parseTree));
|
|
2101
2108
|
for (const scopedNode of this._scopedNodes) {
|
|
2102
|
-
const scope =
|
|
2109
|
+
const scope = this._nodeInfo.getScope(scopedNode);
|
|
2103
2110
|
if (scope) {
|
|
2104
2111
|
scope.symbolTable.forEach((symbol, name) => {
|
|
2105
2112
|
this._conditionallyReportUnusedSymbol(name, symbol, scope.type, dependentFileInfo);
|
|
@@ -2116,7 +2123,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2116
2123
|
// Report unaccessed type parameters.
|
|
2117
2124
|
const accessedSymbolSet = this._fileInfo.accessedSymbolSet;
|
|
2118
2125
|
for (const paramList of this._typeParamLists) {
|
|
2119
|
-
const typeParamScope =
|
|
2126
|
+
const typeParamScope = this._nodeInfo.getScope(paramList);
|
|
2120
2127
|
for (const param of paramList.d.params) {
|
|
2121
2128
|
const symbol = typeParamScope?.symbolTable.get(param.d.name.d.value);
|
|
2122
2129
|
if (!symbol) {
|
|
@@ -2663,6 +2670,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2663
2670
|
if (this._fileInfo.isStubFile) {
|
|
2664
2671
|
return;
|
|
2665
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
|
+
}
|
|
2666
2679
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedClass;
|
|
2667
2680
|
nameNode = decl.node.d.name;
|
|
2668
2681
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
|
|
@@ -2677,6 +2690,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2677
2690
|
if (this._fileInfo.isStubFile) {
|
|
2678
2691
|
return;
|
|
2679
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
|
+
}
|
|
2680
2699
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedFunction;
|
|
2681
2700
|
nameNode = decl.node.d.name;
|
|
2682
2701
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
|
|
@@ -2786,10 +2805,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2786
2805
|
if (this._fileInfo.diagnosticRuleSet.reportUnnecessaryIsInstance !== 'none') {
|
|
2787
2806
|
const narrowedTypeNegative = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
|
|
2788
2807
|
/* isTypeIsCheck */ false,
|
|
2789
|
-
/* isPositiveTest */ false, node);
|
|
2808
|
+
/* isPositiveTest */ false, node, this._nodeInfo);
|
|
2790
2809
|
const narrowedTypePositive = (0, typeGuards_1.narrowTypeForInstanceOrSubclass)(this._evaluator, arg0Type, classTypeList, isInstanceCheck,
|
|
2791
2810
|
/* isTypeIsCheck */ false,
|
|
2792
|
-
/* isPositiveTest */ true, node);
|
|
2811
|
+
/* isPositiveTest */ true, node, this._nodeInfo);
|
|
2793
2812
|
const isAlwaysTrue = (0, types_1.isNever)(narrowedTypeNegative);
|
|
2794
2813
|
const isNeverTrue = (0, types_1.isNever)(narrowedTypePositive);
|
|
2795
2814
|
if (isAlwaysTrue || isNeverTrue) {
|
|
@@ -3127,7 +3146,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3127
3146
|
if (node.parent?.nodeType === 1 /* ParseNodeType.Argument */ && node.parent.d.name === node) {
|
|
3128
3147
|
return;
|
|
3129
3148
|
}
|
|
3130
|
-
if (!
|
|
3149
|
+
if (!this._nodeInfo.isCodeUnreachable(node)) {
|
|
3131
3150
|
const type = this._evaluator.getType(node);
|
|
3132
3151
|
if (type) {
|
|
3133
3152
|
if ((0, types_1.isUnbound)(type)) {
|
|
@@ -3243,7 +3262,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3243
3262
|
// enum class that has already defined values.
|
|
3244
3263
|
_validateEnumClassOverride(node, classType) {
|
|
3245
3264
|
classType.shared.baseClasses.forEach((baseClass, index) => {
|
|
3246
|
-
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)) {
|
|
3247
3266
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.enumClassOverride().format({ name: baseClass.shared.name }), node.d.arguments[index]);
|
|
3248
3267
|
}
|
|
3249
3268
|
});
|
|
@@ -3255,8 +3274,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3255
3274
|
const emitBadStatementError = (node) => {
|
|
3256
3275
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBadVar(), node);
|
|
3257
3276
|
};
|
|
3277
|
+
const nodeInfo = this._nodeInfo;
|
|
3258
3278
|
function validateStatement(statement) {
|
|
3259
|
-
if (
|
|
3279
|
+
if (nodeInfo.isCodeUnreachable(statement)) {
|
|
3260
3280
|
return;
|
|
3261
3281
|
}
|
|
3262
3282
|
if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
|
|
@@ -3271,7 +3291,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3271
3291
|
return;
|
|
3272
3292
|
}
|
|
3273
3293
|
if (statement.nodeType === 22 /* ParseNodeType.If */) {
|
|
3274
|
-
const conditionValue =
|
|
3294
|
+
const conditionValue = nodeInfo.getStaticConditionValue(statement);
|
|
3275
3295
|
if (conditionValue === undefined) {
|
|
3276
3296
|
emitBadStatementError(statement);
|
|
3277
3297
|
return;
|
|
@@ -3297,12 +3317,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3297
3317
|
if (!returnType) {
|
|
3298
3318
|
return;
|
|
3299
3319
|
}
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3320
|
+
const guardSubtypes = [];
|
|
3321
|
+
(0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
|
|
3322
|
+
if ((0, types_1.isClassInstance)(subtype) &&
|
|
3323
|
+
(types_1.ClassType.isBuiltIn(subtype, 'TypeGuard') || types_1.ClassType.isBuiltIn(subtype, 'TypeIs')) &&
|
|
3324
|
+
subtype.priv.typeArgs &&
|
|
3325
|
+
subtype.priv.typeArgs.length >= 1) {
|
|
3326
|
+
guardSubtypes.push(subtype);
|
|
3327
|
+
}
|
|
3328
|
+
});
|
|
3329
|
+
if (guardSubtypes.length === 0) {
|
|
3306
3330
|
return;
|
|
3307
3331
|
}
|
|
3308
3332
|
// Make sure there's at least one input parameter provided.
|
|
@@ -3317,25 +3341,27 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3317
3341
|
if (paramCount < 1) {
|
|
3318
3342
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeGuardParamCount(), node.d.name);
|
|
3319
3343
|
}
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3344
|
+
const scopeIds = (0, typeUtils_1.getTypeVarScopeIds)(functionType);
|
|
3345
|
+
// Determine the type of the first parameter.
|
|
3346
|
+
const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
|
|
3347
|
+
if (paramIndex >= functionType.shared.parameters.length) {
|
|
3348
|
+
return;
|
|
3349
|
+
}
|
|
3350
|
+
const paramType = (0, typeUtils_1.makeTypeVarsBound)(types_1.FunctionType.getParamType(functionType, paramIndex), scopeIds);
|
|
3351
|
+
for (const guardSubtype of guardSubtypes) {
|
|
3352
|
+
if (types_1.ClassType.isBuiltIn(guardSubtype, 'TypeIs')) {
|
|
3353
|
+
const narrowedType = guardSubtype.priv.typeArgs[0];
|
|
3354
|
+
let typeGuardType = (0, typeUtils_1.makeTypeVarsBound)(narrowedType, scopeIds);
|
|
3355
|
+
typeGuardType = types_1.TypeBase.cloneWithTypeForm(typeGuardType, typeGuardType);
|
|
3356
|
+
// Verify that the typeGuardType is a narrower type than the paramType.
|
|
3357
|
+
if (!this._evaluator.assignType(paramType, typeGuardType)) {
|
|
3358
|
+
const returnAnnotation = node.d.returnAnnotation || node.d.funcAnnotationComment?.d.returnAnnotation;
|
|
3359
|
+
if (returnAnnotation) {
|
|
3360
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typeIsReturnType().format({
|
|
3361
|
+
type: this._evaluator.printType(paramType),
|
|
3362
|
+
returnType: this._evaluator.printType(narrowedType),
|
|
3363
|
+
}), returnAnnotation);
|
|
3364
|
+
}
|
|
3339
3365
|
}
|
|
3340
3366
|
}
|
|
3341
3367
|
}
|
|
@@ -3375,7 +3401,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3375
3401
|
if (declaredReturnType) {
|
|
3376
3402
|
this._reportUnknownReturnResult(node, declaredReturnType);
|
|
3377
3403
|
this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
|
|
3378
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
3404
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
3379
3405
|
declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
3380
3406
|
}
|
|
3381
3407
|
// Wrap the declared type in a generator type if the function is a generator.
|
|
@@ -3503,7 +3529,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3503
3529
|
// type checking perspective, if the runtime treats the assignment
|
|
3504
3530
|
// as an enum member but there is a type annotation present, it is
|
|
3505
3531
|
// considered a type checking error.
|
|
3506
|
-
const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name,
|
|
3532
|
+
const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name, this._nodeInfo,
|
|
3507
3533
|
/* ignoreAnnotation */ true);
|
|
3508
3534
|
// Is this symbol a literal instance of the enum class?
|
|
3509
3535
|
if (!symbolType ||
|
|
@@ -5299,7 +5325,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5299
5325
|
if (!declaredReturnType) {
|
|
5300
5326
|
return;
|
|
5301
5327
|
}
|
|
5302
|
-
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node);
|
|
5328
|
+
const liveScopes = ParseTreeUtils.getTypeVarScopesForNode(node, this._nodeInfo);
|
|
5303
5329
|
declaredReturnType = (0, typeUtils_1.makeTypeVarsBound)(declaredReturnType, liveScopes);
|
|
5304
5330
|
let generatorType;
|
|
5305
5331
|
if (!enclosingFunctionNode.d.isAsync &&
|
|
@@ -5406,7 +5432,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
5406
5432
|
});
|
|
5407
5433
|
}
|
|
5408
5434
|
_reportDuplicateImports() {
|
|
5409
|
-
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode
|
|
5435
|
+
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode,
|
|
5436
|
+
/* includeImplicitImports */ false, this._nodeInfo);
|
|
5410
5437
|
const importModuleMap = new Map();
|
|
5411
5438
|
importStatements.orderedImports.forEach((importStatement) => {
|
|
5412
5439
|
if (importStatement.node.nodeType === 25 /* ParseNodeType.ImportFrom */) {
|