@zzzen/pyright-internal 1.1.255 → 1.2.0-dev.20220703
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/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/analyzer/aliasDeclarationUtils.js +2 -2
- package/dist/analyzer/analyzerFileInfo.d.ts +1 -1
- package/dist/analyzer/analyzerNodeInfo.d.ts +4 -1
- package/dist/analyzer/analyzerNodeInfo.js +12 -1
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -0
- package/dist/analyzer/backgroundAnalysisProgram.js +3 -0
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.d.ts +6 -1
- package/dist/analyzer/binder.js +142 -32
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +4 -1
- package/dist/analyzer/checker.js +144 -73
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +33 -0
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +6 -3
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/dataClasses.js +6 -4
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +18 -6
- package/dist/analyzer/declaration.js +25 -5
- package/dist/analyzer/declaration.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +1 -1
- package/dist/analyzer/declarationUtils.js +19 -16
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/importResult.js +7 -0
- package/dist/analyzer/importResult.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +10 -1
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +1 -1
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/packageTypeReport.js +10 -1
- package/dist/analyzer/packageTypeReport.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +6 -6
- package/dist/analyzer/parseTreeUtils.d.ts +3 -3
- package/dist/analyzer/parseTreeUtils.js +27 -13
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.d.ts +4 -1
- package/dist/analyzer/parseTreeWalker.js +19 -1
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/program.d.ts +2 -1
- package/dist/analyzer/program.js +27 -23
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +2 -0
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.d.ts +0 -1
- package/dist/analyzer/protocols.js +4 -64
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/scope.js +22 -1
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/service.d.ts +20 -8
- package/dist/analyzer/service.js +39 -19
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +1 -1
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +2 -0
- package/dist/analyzer/sourceFileInfoUtils.js +15 -0
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -0
- package/dist/analyzer/symbol.d.ts +3 -1
- package/dist/analyzer/symbol.js +39 -1
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +8 -4
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +11 -3
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +610 -208
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -1
- package/dist/analyzer/typeEvaluatorTypes.js +65 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeEvaluatorWithTracker.js +2 -0
- package/dist/analyzer/typeEvaluatorWithTracker.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +2 -0
- package/dist/analyzer/typeGuards.js +113 -69
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +27 -2
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.d.ts +4 -1
- package/dist/analyzer/typeStubWriter.js +36 -0
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +129 -33
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +2 -1
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +12 -4
- package/dist/analyzer/types.js +215 -6
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +1 -1
- package/dist/commands/commands.js +9 -0
- package/dist/commands/commands.js.map +1 -1
- package/dist/common/commandLineOptions.js +8 -1
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/core.js +7 -1
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.js +9 -1
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/host.js +7 -1
- package/dist/common/host.js.map +1 -1
- package/dist/common/pathUtils.d.ts +1 -0
- package/dist/common/pathUtils.js +34 -1
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/stringUtils.d.ts +1 -0
- package/dist/common/stringUtils.js +8 -1
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +10 -3
- package/dist/languageServerBase.js +40 -14
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.js +3 -0
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.js +2 -1
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +9 -9
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +22 -18
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +3 -3
- package/dist/languageService/documentSymbolCollector.js +1 -1
- package/dist/languageService/documentSymbolProvider.js +10 -7
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.js +19 -5
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.js +8 -5
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +1 -1
- package/dist/localization/localize.d.ts +27 -0
- package/dist/localization/localize.js +16 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +18 -2
- package/dist/parser/parseNodes.d.ts +44 -5
- package/dist/parser/parseNodes.js +191 -4
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +3 -1
- package/dist/parser/parser.js +155 -24
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.js +8 -1
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.js +4 -3
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +5 -3
- package/dist/parser/tokenizerTypes.js +157 -1
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +6 -1
- package/dist/pyright.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +12 -9
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +4 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/config.test.js +14 -13
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/debug.test.js +6 -0
- package/dist/tests/debug.test.js.map +1 -1
- package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.js +53 -0
- package/dist/tests/fourslash/completions.autoimport.lib.alias.fourslash.js.map +1 -0
- package/dist/tests/fourslash/fourslash.d.ts +16 -0
- package/dist/tests/fourslash/hover.class.docString.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/hover.class.docString.fourslash.js +24 -0
- package/dist/tests/fourslash/hover.class.docString.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/fourSlashParser.js +6 -0
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.js +19 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +9 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.Consts.d.ts +1 -0
- package/dist/tests/harness/fourslash/testState.Consts.js +1 -0
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +4 -3
- package/dist/tests/harness/fourslash/testState.js +27 -11
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +25 -1
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/pathUtils.test.js +17 -0
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/testUtils.js +1 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +9 -1
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +9 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +4 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.d.ts +1 -0
- package/dist/tests/typeEvaluator5.test.js +112 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -0
- package/dist/workspaceMap.d.ts +2 -1
- package/dist/workspaceMap.js +25 -3
- package/dist/workspaceMap.js.map +1 -1
- package/package.json +45 -45
- package/src/analyzer/aliasDeclarationUtils.ts +0 -169
- package/src/analyzer/analysis.ts +0 -92
- package/src/analyzer/analyzerFileInfo.ts +0 -56
- package/src/analyzer/analyzerNodeInfo.ts +0 -198
- package/src/analyzer/backgroundAnalysisProgram.ts +0 -311
- package/src/analyzer/binder.ts +0 -4081
- package/src/analyzer/checker.ts +0 -5507
- package/src/analyzer/circularDependency.ts +0 -52
- package/src/analyzer/codeFlowEngine.ts +0 -1548
- package/src/analyzer/codeFlowTypes.ts +0 -266
- package/src/analyzer/codeFlowUtils.ts +0 -436
- package/src/analyzer/commentUtils.ts +0 -174
- package/src/analyzer/constraintSolver.ts +0 -926
- package/src/analyzer/constructorTransform.ts +0 -317
- package/src/analyzer/dataClasses.ts +0 -999
- package/src/analyzer/declaration.ts +0 -252
- package/src/analyzer/declarationUtils.ts +0 -238
- package/src/analyzer/docStringConversion.ts +0 -850
- package/src/analyzer/docStringUtils.ts +0 -112
- package/src/analyzer/functionTransform.ts +0 -137
- package/src/analyzer/importResolver.ts +0 -2308
- package/src/analyzer/importResult.ts +0 -98
- package/src/analyzer/importStatementUtils.ts +0 -834
- package/src/analyzer/namedTuples.ts +0 -422
- package/src/analyzer/packageTypeReport.ts +0 -108
- package/src/analyzer/packageTypeVerifier.ts +0 -1466
- package/src/analyzer/parentDirectoryCache.ts +0 -88
- package/src/analyzer/parseTreeCleaner.ts +0 -35
- package/src/analyzer/parseTreeUtils.ts +0 -2165
- package/src/analyzer/parseTreeWalker.ts +0 -663
- package/src/analyzer/patternMatching.ts +0 -1356
- package/src/analyzer/program.ts +0 -2778
- package/src/analyzer/properties.ts +0 -534
- package/src/analyzer/protocols.ts +0 -660
- package/src/analyzer/pyTypedUtils.ts +0 -52
- package/src/analyzer/pythonPathUtils.ts +0 -201
- package/src/analyzer/scope.ts +0 -202
- package/src/analyzer/scopeUtils.ts +0 -81
- package/src/analyzer/service.ts +0 -1679
- package/src/analyzer/sourceFile.ts +0 -1401
- package/src/analyzer/sourceMapper.ts +0 -717
- package/src/analyzer/staticExpressions.ts +0 -308
- package/src/analyzer/symbol.ts +0 -249
- package/src/analyzer/symbolNameUtils.ts +0 -50
- package/src/analyzer/symbolUtils.ts +0 -49
- package/src/analyzer/testWalker.ts +0 -101
- package/src/analyzer/tracePrinter.ts +0 -264
- package/src/analyzer/typeCache.ts +0 -181
- package/src/analyzer/typeDocStringUtils.ts +0 -371
- package/src/analyzer/typeEvaluator.ts +0 -23395
- package/src/analyzer/typeEvaluatorTypes.ts +0 -452
- package/src/analyzer/typeEvaluatorWithTracker.ts +0 -161
- package/src/analyzer/typeGuards.ts +0 -1828
- package/src/analyzer/typePrinter.ts +0 -807
- package/src/analyzer/typeStubWriter.ts +0 -727
- package/src/analyzer/typeUtils.ts +0 -3126
- package/src/analyzer/typeVarContext.ts +0 -330
- package/src/analyzer/typedDicts.ts +0 -950
- package/src/analyzer/types.ts +0 -2857
- package/src/backgroundAnalysis.ts +0 -49
- package/src/backgroundAnalysisBase.ts +0 -606
- package/src/backgroundThreadBase.ts +0 -143
- package/src/commands/commandController.ts +0 -62
- package/src/commands/commandResult.ts +0 -21
- package/src/commands/commands.ts +0 -16
- package/src/commands/createTypeStub.ts +0 -56
- package/src/commands/quickActionCommand.ts +0 -40
- package/src/commands/restartServer.ts +0 -20
- package/src/common/cancellationUtils.ts +0 -71
- package/src/common/chokidarFileWatcherProvider.ts +0 -74
- package/src/common/collectionUtils.ts +0 -379
- package/src/common/commandLineOptions.ts +0 -132
- package/src/common/configOptions.ts +0 -1291
- package/src/common/console.ts +0 -201
- package/src/common/core.ts +0 -152
- package/src/common/crypto.ts +0 -60
- package/src/common/debug.ts +0 -144
- package/src/common/deferred.ts +0 -78
- package/src/common/diagnostic.ts +0 -191
- package/src/common/diagnosticRules.ts +0 -80
- package/src/common/diagnosticSink.ts +0 -150
- package/src/common/editAction.ts +0 -46
- package/src/common/extensibility.ts +0 -35
- package/src/common/extensions.ts +0 -21
- package/src/common/fileBasedCancellationUtils.ts +0 -274
- package/src/common/fileSystem.ts +0 -152
- package/src/common/fullAccessHost.ts +0 -203
- package/src/common/host.ts +0 -49
- package/src/common/logTracker.ts +0 -157
- package/src/common/lspUtils.ts +0 -18
- package/src/common/memUtils.ts +0 -36
- package/src/common/pathConsts.ts +0 -16
- package/src/common/pathUtils.ts +0 -987
- package/src/common/positionUtils.ts +0 -78
- package/src/common/progressReporter.ts +0 -53
- package/src/common/pythonVersion.ts +0 -74
- package/src/common/realFileSystem.ts +0 -433
- package/src/common/stringUtils.ts +0 -161
- package/src/common/textEditUtils.ts +0 -31
- package/src/common/textRange.ts +0 -225
- package/src/common/textRangeCollection.ts +0 -122
- package/src/common/timing.ts +0 -105
- package/src/common/uriParser.ts +0 -26
- package/src/common/workspaceEditUtils.ts +0 -100
- package/src/languageServerBase.ts +0 -1556
- package/src/languageService/analyzerServiceExecutor.ts +0 -144
- package/src/languageService/autoImporter.ts +0 -926
- package/src/languageService/callHierarchyProvider.ts +0 -476
- package/src/languageService/codeActionProvider.ts +0 -85
- package/src/languageService/completionProvider.ts +0 -3103
- package/src/languageService/definitionProvider.ts +0 -235
- package/src/languageService/documentHighlightProvider.ts +0 -61
- package/src/languageService/documentSymbolCollector.ts +0 -466
- package/src/languageService/documentSymbolProvider.ts +0 -466
- package/src/languageService/hoverProvider.ts +0 -499
- package/src/languageService/importAdder.ts +0 -437
- package/src/languageService/importSorter.ts +0 -196
- package/src/languageService/indentationUtils.ts +0 -813
- package/src/languageService/quickActions.ts +0 -113
- package/src/languageService/referencesProvider.ts +0 -316
- package/src/languageService/renameModuleProvider.ts +0 -1400
- package/src/languageService/signatureHelpProvider.ts +0 -227
- package/src/languageService/tooltipUtils.ts +0 -147
- package/src/localization/localize.ts +0 -1272
- package/src/localization/package.nls.de.json +0 -3
- package/src/localization/package.nls.en-us.json +0 -636
- package/src/localization/package.nls.es.json +0 -3
- package/src/localization/package.nls.fr.json +0 -3
- package/src/localization/package.nls.ja.json +0 -3
- package/src/localization/package.nls.ru.json +0 -3
- package/src/localization/package.nls.zh-cn.json +0 -3
- package/src/localization/package.nls.zh-tw.json +0 -3
- package/src/nodeMain.ts +0 -21
- package/src/nodeServer.ts +0 -30
- package/src/parser/characterStream.ts +0 -145
- package/src/parser/characters.ts +0 -285
- package/src/parser/parseNodes.ts +0 -2338
- package/src/parser/parser.ts +0 -4859
- package/src/parser/stringTokenUtils.ts +0 -564
- package/src/parser/tokenizer.ts +0 -1379
- package/src/parser/tokenizerTypes.ts +0 -420
- package/src/parser/unicode.ts +0 -2917
- package/src/pyright.ts +0 -824
- package/src/pyrightFileSystem.ts +0 -237
- package/src/readonlyAugmentedFileSystem.ts +0 -204
- package/src/server.ts +0 -298
- package/src/tests/chainedSourceFiles.test.ts +0 -183
- package/src/tests/checker.test.ts +0 -445
- package/src/tests/collectionUtils.test.ts +0 -178
- package/src/tests/common.test.ts +0 -117
- package/src/tests/config.test.ts +0 -291
- package/src/tests/debug.test.ts +0 -120
- package/src/tests/deferred.test.ts +0 -54
- package/src/tests/diagnosticOverrides.test.ts +0 -104
- package/src/tests/docStringConversion.test.ts +0 -823
- package/src/tests/docStringUtils.test.ts +0 -57
- package/src/tests/documentSymbolCollector.test.ts +0 -735
- package/src/tests/filesystem.test.ts +0 -215
- package/src/tests/fourSlashParser.test.ts +0 -330
- package/src/tests/fourSlashRunner.test.ts +0 -36
- package/src/tests/fourslash/completions.autoimport.Lib.Found.Type.fourslash.ts +0 -33
- package/src/tests/fourslash/completions.autoimport.Lib.Found.duplication.fourslash.ts +0 -47
- package/src/tests/fourslash/completions.autoimport.Lib.NotFound.fourslash.ts +0 -14
- package/src/tests/fourslash/completions.autoimport.disabled.fourslash.ts +0 -25
- package/src/tests/fourslash/completions.autoimport.duplicates.fourslash.ts +0 -36
- package/src/tests/fourslash/completions.autoimport.fourslash.ts +0 -29
- package/src/tests/fourslash/completions.autoimport.fromImport.fourslash.ts +0 -130
- package/src/tests/fourslash/completions.autoimport.plainText.fourslash.ts +0 -29
- package/src/tests/fourslash/completions.autoimport.shadow.fourslash.ts +0 -48
- package/src/tests/fourslash/completions.autoimport.submodule.fourslash.ts +0 -31
- package/src/tests/fourslash/completions.autoimport.topLevel.fourslash.ts +0 -57
- package/src/tests/fourslash/completions.builtinDocstrings.fourslash.ts +0 -117
- package/src/tests/fourslash/completions.builtinOverride.fourslash.ts +0 -22
- package/src/tests/fourslash/completions.call.stringLiteral.fourslash.ts +0 -55
- package/src/tests/fourslash/completions.call.typedDict.fourslash.ts +0 -247
- package/src/tests/fourslash/completions.call.typedDict.list.fourslash.ts +0 -163
- package/src/tests/fourslash/completions.call.typedDict.states.fourslash.ts +0 -135
- package/src/tests/fourslash/completions.classVariable.fourslash.ts +0 -37
- package/src/tests/fourslash/completions.comment.fourslash.ts +0 -28
- package/src/tests/fourslash/completions.declNames.class.fourslash.ts +0 -35
- package/src/tests/fourslash/completions.declNames.exception.fourslash.ts +0 -18
- package/src/tests/fourslash/completions.declNames.for.fourslash.ts +0 -30
- package/src/tests/fourslash/completions.declNames.importAlias.fourslash.ts +0 -15
- package/src/tests/fourslash/completions.declNames.lambda.fourslash.ts +0 -45
- package/src/tests/fourslash/completions.declNames.method.fourslash.ts +0 -71
- package/src/tests/fourslash/completions.declNames.overload.fourslash.ts +0 -156
- package/src/tests/fourslash/completions.declNames.topLevelOverload.fourslash.ts +0 -141
- package/src/tests/fourslash/completions.dictionary.keys.complex.fourslash.ts +0 -76
- package/src/tests/fourslash/completions.dictionary.keys.expression.fourslash.ts +0 -63
- package/src/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.ts +0 -161
- package/src/tests/fourslash/completions.dictionary.keys.simple.fourslash.ts +0 -151
- package/src/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.ts +0 -116
- package/src/tests/fourslash/completions.dictionary.keys.symbols.fourslash.ts +0 -53
- package/src/tests/fourslash/completions.enums.members.fourslash.ts +0 -44
- package/src/tests/fourslash/completions.excluded.fourslash.ts +0 -12
- package/src/tests/fourslash/completions.fourslash.ts +0 -51
- package/src/tests/fourslash/completions.fstring.fourslash.ts +0 -33
- package/src/tests/fourslash/completions.fstring.stringLiteral.fourslash.ts +0 -96
- package/src/tests/fourslash/completions.fuzzyMatching.fourslash.ts +0 -30
- package/src/tests/fourslash/completions.importDunderNames.fourslash.ts +0 -31
- package/src/tests/fourslash/completions.importSubmodule.fourslash.ts +0 -26
- package/src/tests/fourslash/completions.importsDuplicates.fourslash.ts +0 -23
- package/src/tests/fourslash/completions.inList.fourslash.ts +0 -33
- package/src/tests/fourslash/completions.included.fourslash.ts +0 -12
- package/src/tests/fourslash/completions.indexer.keys.getitem.fourslash.ts +0 -57
- package/src/tests/fourslash/completions.inherited.function.docFromStub.fourslash.ts +0 -28
- package/src/tests/fourslash/completions.inherited.overload.docFromScrWithStub.fourslash.ts +0 -52
- package/src/tests/fourslash/completions.inherited.overload.docFromStub.fourslash.ts +0 -53
- package/src/tests/fourslash/completions.inherited.property.docFromSrc.fourslash.ts +0 -104
- package/src/tests/fourslash/completions.inherited.property.docFromStub.fourslash.ts +0 -108
- package/src/tests/fourslash/completions.keywords.pythonVersion.fourslash.ts +0 -72
- package/src/tests/fourslash/completions.libCodeAndStub.fourslash.ts +0 -79
- package/src/tests/fourslash/completions.libCodeNoStub.fourslash.ts +0 -69
- package/src/tests/fourslash/completions.libStub.fourslash.ts +0 -69
- package/src/tests/fourslash/completions.literals.fourslash.ts +0 -33
- package/src/tests/fourslash/completions.localCode.fourslash.ts +0 -74
- package/src/tests/fourslash/completions.moduleContext.UnknownMemberOnInstance.fourslash.ts +0 -17
- package/src/tests/fourslash/completions.moduleContext.UnknownStaticFunctionOnClass.fourslash.ts +0 -57
- package/src/tests/fourslash/completions.moduleContext.libCodeNoStub.fourslash.ts +0 -30
- package/src/tests/fourslash/completions.overloads.fourslash.ts +0 -40
- package/src/tests/fourslash/completions.override.default.fourslash.ts +0 -47
- package/src/tests/fourslash/completions.override.default.importStub.ts +0 -50
- package/src/tests/fourslash/completions.override.default.imported.fourslash.ts +0 -61
- package/src/tests/fourslash/completions.override.default.stub.fourslash.ts +0 -47
- package/src/tests/fourslash/completions.override.fourslash.ts +0 -47
- package/src/tests/fourslash/completions.override.property.fourslash.ts +0 -31
- package/src/tests/fourslash/completions.override.property.stub.fourslash.ts +0 -31
- package/src/tests/fourslash/completions.override.staticAndClassmethod.fourslash.ts +0 -64
- package/src/tests/fourslash/completions.override.stub.fourslash.ts +0 -47
- package/src/tests/fourslash/completions.override2.fourslash.ts +0 -71
- package/src/tests/fourslash/completions.parameters.fourslash.ts +0 -23
- package/src/tests/fourslash/completions.params.fourslash.ts +0 -24
- package/src/tests/fourslash/completions.parentFolder.fourslash.ts +0 -17
- package/src/tests/fourslash/completions.parentFolders.fourslash.ts +0 -77
- package/src/tests/fourslash/completions.plainText.fourslash.ts +0 -34
- package/src/tests/fourslash/completions.private.fourslash.ts +0 -64
- package/src/tests/fourslash/completions.property.fourslash.ts +0 -28
- package/src/tests/fourslash/completions.propertyDocStrings.fourslash.ts +0 -64
- package/src/tests/fourslash/completions.self.fourslash.ts +0 -43
- package/src/tests/fourslash/completions.stringLiteral.escape.fourslash.ts +0 -71
- package/src/tests/fourslash/completions.stringLiteral.fourslash.ts +0 -79
- package/src/tests/fourslash/completions.typeAlias.fourslash.ts +0 -29
- package/src/tests/fourslash/completions.typeshed.fourslash.ts +0 -9
- package/src/tests/fourslash/completions.vardecls.fourslash.ts +0 -40
- package/src/tests/fourslash/completions.variableDocStrings.fourslash.ts +0 -69
- package/src/tests/fourslash/completions.wildcardimports.fourslash.ts +0 -116
- package/src/tests/fourslash/completions.with.fourslash.ts +0 -26
- package/src/tests/fourslash/diagnostics.missingModuleSource.fourslash.ts +0 -69
- package/src/tests/fourslash/findDefinitions.builtinClass.fourslash.ts +0 -29
- package/src/tests/fourslash/findDefinitions.classes.fourslash.ts +0 -101
- package/src/tests/fourslash/findDefinitions.definitionFilter.preferSource.fourslash.ts +0 -29
- package/src/tests/fourslash/findDefinitions.definitionFilter.preferSource.onlyStubs.ts +0 -24
- package/src/tests/fourslash/findDefinitions.definitionFilter.preferStub.fourslash.ts +0 -29
- package/src/tests/fourslash/findDefinitions.definitionFilter.preferStub.onlySource.fourslash.ts +0 -25
- package/src/tests/fourslash/findDefinitions.fields.fourslash.ts +0 -131
- package/src/tests/fourslash/findDefinitions.functions.fourslash.ts +0 -87
- package/src/tests/fourslash/findDefinitions.methods.fourslash.ts +0 -162
- package/src/tests/fourslash/findDefinitions.modules.fourslash.ts +0 -50
- package/src/tests/fourslash/findDefinitions.namespaceImport.fourslash.ts +0 -40
- package/src/tests/fourslash/findDefinitions.overloads.fourslash.ts +0 -223
- package/src/tests/fourslash/findDefinitions.parameters.fourslash.ts +0 -162
- package/src/tests/fourslash/findDefinitions.sourceAndStub.function.fourslash.ts +0 -26
- package/src/tests/fourslash/findDefinitions.sourceAndStub.innerClass.fourslash.ts +0 -32
- package/src/tests/fourslash/findDefinitions.sourceAndStub.innerClassMethod.fourslash.ts +0 -33
- package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClass.fourslash.ts +0 -28
- package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassMethod.fourslash.ts +0 -29
- package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassPropertyReadOnly.fourslash.ts +0 -31
- package/src/tests/fourslash/findDefinitions.sourceAndStub.outerClassPropertyReadWrite.fourslash.ts +0 -36
- package/src/tests/fourslash/findDefinitions.sourceOnly.class.fourslash.ts +0 -29
- package/src/tests/fourslash/findDefinitions.sourceOnly.function1.fourslash.ts +0 -28
- package/src/tests/fourslash/findDefinitions.sourceOnly.function2.fourslash.ts +0 -28
- package/src/tests/fourslash/findDefinitions.sourceOnly.relativeImport1.fourslash.ts +0 -22
- package/src/tests/fourslash/findDefinitions.sourceOnly.relativeImport2.fourslash.ts +0 -22
- package/src/tests/fourslash/findDefinitions.stubOnly.fourslash.ts +0 -61
- package/src/tests/fourslash/findDefinitions.stubPackages.fourslash.ts +0 -71
- package/src/tests/fourslash/findDefinitions.typedDict.keys.fourslash.ts +0 -99
- package/src/tests/fourslash/findDefinitions.variables.fourslash.ts +0 -88
- package/src/tests/fourslash/findDefinitions.wildcardimports.fourslash.ts +0 -117
- package/src/tests/fourslash/findTypeDefinitions.builtinClass.fourslash.ts +0 -26
- package/src/tests/fourslash/findTypeDefinitions.classes.fourslash.ts +0 -72
- package/src/tests/fourslash/findTypeDefinitions.unions.fourslash.ts +0 -26
- package/src/tests/fourslash/findallreferences.classPropertyReadWrite.ts +0 -39
- package/src/tests/fourslash/findallreferences.fourslash.ts +0 -34
- package/src/tests/fourslash/findallreferences.importalias.fourslash.ts +0 -34
- package/src/tests/fourslash/findallreferences.invokedFromLibrary.fourslash.ts +0 -52
- package/src/tests/fourslash/findallreferences.module.nested.fourslash.ts +0 -67
- package/src/tests/fourslash/findallreferences.modules.duplicated.fourslash.ts +0 -59
- package/src/tests/fourslash/findallreferences.modules.fourslash.ts +0 -46
- package/src/tests/fourslash/findallreferences.modules.shadow.fourslash.ts +0 -95
- package/src/tests/fourslash/findallreferences.openFiles.fourslash.ts +0 -37
- package/src/tests/fourslash/findallreferences.parameter.fourslash.ts +0 -24
- package/src/tests/fourslash/findallreferences.sourceAndStub.class.fourslash.ts +0 -33
- package/src/tests/fourslash/findallreferences.sourceAndStub.classMethod.fourslash.ts +0 -37
- package/src/tests/fourslash/findallreferences.sourceAndStub.classPropertyReadOnly.fourslash.ts +0 -40
- package/src/tests/fourslash/findallreferences.sourceAndStub.classPropertyReadWrite.fourslash.skip.ts +0 -48
- package/src/tests/fourslash/findallreferences.sourceAndStub.function.fourslash.ts +0 -35
- package/src/tests/fourslash/findallreferences.variable.fourslash.ts +0 -24
- package/src/tests/fourslash/fourslash.ts +0 -411
- package/src/tests/fourslash/highlightreferences.attributes.fourslash.ts +0 -31
- package/src/tests/fourslash/hover.builtinDocstrings.fourslash.ts +0 -64
- package/src/tests/fourslash/hover.classNoInit.fourslash.ts +0 -14
- package/src/tests/fourslash/hover.docFromScr.stringFormat.fourslash.ts +0 -52
- package/src/tests/fourslash/hover.docFromSrc.fourslash.ts +0 -83
- package/src/tests/fourslash/hover.docFromSrc.pkg-vs-module1.fourslash.ts +0 -26
- package/src/tests/fourslash/hover.docFromSrc.pkg-vs-module2.fourslash.ts +0 -26
- package/src/tests/fourslash/hover.docFromSrc.relativeImport1.fourslash.ts +0 -23
- package/src/tests/fourslash/hover.docFromSrc.relativeImport2.fourslash.ts +0 -22
- package/src/tests/fourslash/hover.docFromSrc.relativeImport3.fourslash.ts +0 -46
- package/src/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.ts +0 -29
- package/src/tests/fourslash/hover.docFromSrc.typeshed.fourslash.ts +0 -20
- package/src/tests/fourslash/hover.docstring.links.fourslash.ts +0 -12
- package/src/tests/fourslash/hover.docstring.overloads.fourslash.ts +0 -41
- package/src/tests/fourslash/hover.docstring.split.fourslash.ts +0 -24
- package/src/tests/fourslash/hover.fourslash.ts +0 -20
- package/src/tests/fourslash/hover.import.django.view.fourslash.ts +0 -27
- package/src/tests/fourslash/hover.import.fourslash.ts +0 -11
- package/src/tests/fourslash/hover.inherited.docFromSrc.fourslash.ts +0 -63
- package/src/tests/fourslash/hover.inherited.docFromSrcWithStub.fourslash.ts +0 -54
- package/src/tests/fourslash/hover.inherited.docFromStub.fourslash.ts +0 -42
- package/src/tests/fourslash/hover.inherited.overload.docFromSrcWithStub.fourslash.ts +0 -46
- package/src/tests/fourslash/hover.inherited.overload.docFromStub.fourslash.ts +0 -47
- package/src/tests/fourslash/hover.inherited.property.docFromSrcWithStub.fourslash.ts +0 -87
- package/src/tests/fourslash/hover.inherited.property.docFromStub.fourslash.ts +0 -91
- package/src/tests/fourslash/hover.init.fourslash.ts +0 -39
- package/src/tests/fourslash/hover.libCodeAndStub.fourslash.ts +0 -52
- package/src/tests/fourslash/hover.libCodeNoStub.fourslash.ts +0 -41
- package/src/tests/fourslash/hover.libStub.fourslash.ts +0 -41
- package/src/tests/fourslash/hover.optionalAliasParameter.fourslash.ts +0 -14
- package/src/tests/fourslash/hover.plainText.fourslash.ts +0 -21
- package/src/tests/fourslash/hover.typedDict.key.fourslash.ts +0 -51
- package/src/tests/fourslash/hover.variable.docString.fourslash.ts +0 -41
- package/src/tests/fourslash/hover.wildcardimports.fourslash.ts +0 -80
- package/src/tests/fourslash/import.publicSymbols.fourslash.ts +0 -65
- package/src/tests/fourslash/import.pytyped.dunderAll.fourslash.ts +0 -77
- package/src/tests/fourslash/import.pytyped.privateSymbols.fourslash.ts +0 -65
- package/src/tests/fourslash/import.pytyped.typeCheckingBasic.fourslash.ts +0 -38
- package/src/tests/fourslash/import.pytyped.typeCheckingOff.fourslash.ts +0 -38
- package/src/tests/fourslash/import.wildcard.fourslash.ts +0 -27
- package/src/tests/fourslash/importnotresolved.fourslash.ts +0 -13
- package/src/tests/fourslash/missingModuleSource.disablingInStrictMode.fourslash.ts +0 -20
- package/src/tests/fourslash/missingModuleSource.fourslash.ts +0 -14
- package/src/tests/fourslash/missingTypeStub.codeAction.fourslash.ts +0 -33
- package/src/tests/fourslash/missingTypeStub.command.multipart.fourslash.ts +0 -48
- package/src/tests/fourslash/missingTypeStub.command.singlefile.fourslash.ts +0 -38
- package/src/tests/fourslash/missingTypeStub.command.singlepart.fourslash.ts +0 -38
- package/src/tests/fourslash/missingTypeStub.fourslash.ts +0 -20
- package/src/tests/fourslash/missingTypeStub.invokeCodeAction.fourslash.ts +0 -36
- package/src/tests/fourslash/noerrors.fourslash.ts +0 -9
- package/src/tests/fourslash/orderImports1.command.fourslash.ts +0 -20
- package/src/tests/fourslash/orderImports2.command.fourslash.ts +0 -24
- package/src/tests/fourslash/rename.externallyHidden.fourslash.ts +0 -24
- package/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts +0 -24
- package/src/tests/fourslash/rename.fourslash.ts +0 -29
- package/src/tests/fourslash/rename.library.fourslash.ts +0 -29
- package/src/tests/fourslash/rename.library.sourceAndStub.fourslash.ts +0 -33
- package/src/tests/fourslash/rename.multipleDecl.fourslash.ts +0 -21
- package/src/tests/fourslash/rename.sourceAndStub.fourslash.ts +0 -37
- package/src/tests/fourslash/rename.string.excluded.fourslash.ts +0 -43
- package/src/tests/fourslash/rename.string.fourslash.ts +0 -26
- package/src/tests/fourslash/signature.builtinDocstrings.fourslash.ts +0 -63
- package/src/tests/fourslash/signature.complicated.fourslash.ts +0 -100
- package/src/tests/fourslash/signature.cornercases.fourslash.ts +0 -23
- package/src/tests/fourslash/signature.docstrings.fourslash.ts +0 -43
- package/src/tests/fourslash/signature.docstrings.overloaded.fourslash.ts +0 -50
- package/src/tests/fourslash/signature.docstrings.wildcardimports.fourslash.ts +0 -122
- package/src/tests/fourslash/signature.overload.fourslash.ts +0 -64
- package/src/tests/fourslash/signature.simple.fourslash.ts +0 -104
- package/src/tests/harness/fourslash/fourSlashParser.ts +0 -441
- package/src/tests/harness/fourslash/fourSlashTypes.ts +0 -134
- package/src/tests/harness/fourslash/runner.ts +0 -99
- package/src/tests/harness/fourslash/testLanguageService.ts +0 -142
- package/src/tests/harness/fourslash/testState.Consts.ts +0 -29
- package/src/tests/harness/fourslash/testState.ts +0 -1993
- package/src/tests/harness/testAccessHost.ts +0 -23
- package/src/tests/harness/testHost.ts +0 -177
- package/src/tests/harness/utils.ts +0 -355
- package/src/tests/harness/vfs/factory.ts +0 -199
- package/src/tests/harness/vfs/filesystem.ts +0 -1893
- package/src/tests/harness/vfs/pathValidation.ts +0 -154
- package/src/tests/importAdder.test.ts +0 -1361
- package/src/tests/importResolver.test.ts +0 -534
- package/src/tests/importStatementUtils.test.ts +0 -526
- package/src/tests/indentationUtils.ptvs.test.ts +0 -388
- package/src/tests/indentationUtils.reindent.test.ts +0 -403
- package/src/tests/indentationUtils.test.ts +0 -455
- package/src/tests/ipythonMode.test.ts +0 -365
- package/src/tests/localizer.test.ts +0 -47
- package/src/tests/parseTreeUtils.test.ts +0 -281
- package/src/tests/parser.test.ts +0 -99
- package/src/tests/pathUtils.test.ts +0 -321
- package/src/tests/pyrightFileSystem.test.ts +0 -183
- package/src/tests/renameModule.folder.test.ts +0 -261
- package/src/tests/renameModule.fromImports.test.ts +0 -952
- package/src/tests/renameModule.imports.test.ts +0 -450
- package/src/tests/renameModule.misc.test.ts +0 -765
- package/src/tests/renameModule.relativePath.test.ts +0 -277
- package/src/tests/renameModuleTestUtils.ts +0 -210
- package/src/tests/samples/abstractClass1.py +0 -51
- package/src/tests/samples/abstractClass2.py +0 -25
- package/src/tests/samples/abstractClass3.py +0 -30
- package/src/tests/samples/abstractClass4.py +0 -30
- package/src/tests/samples/abstractClass5.py +0 -42
- package/src/tests/samples/abstractClass6.py +0 -25
- package/src/tests/samples/abstractClass7.py +0 -22
- package/src/tests/samples/abstractClass8.py +0 -27
- package/src/tests/samples/annotated1.py +0 -72
- package/src/tests/samples/annotatedVar1.py +0 -22
- package/src/tests/samples/annotatedVar2.py +0 -28
- package/src/tests/samples/annotatedVar3.py +0 -54
- package/src/tests/samples/annotatedVar4.py +0 -24
- package/src/tests/samples/annotatedVar5.py +0 -37
- package/src/tests/samples/annotatedVar6.py +0 -22
- package/src/tests/samples/annotatedVar7.py +0 -13
- package/src/tests/samples/annotatedVar8.py +0 -29
- package/src/tests/samples/annotations1.py +0 -98
- package/src/tests/samples/annotations2.py +0 -33
- package/src/tests/samples/annotations3.py +0 -43
- package/src/tests/samples/annotations4.py +0 -54
- package/src/tests/samples/annotations5.py +0 -9
- package/src/tests/samples/annotations6.py +0 -29
- package/src/tests/samples/assert1.py +0 -22
- package/src/tests/samples/assertType1.py +0 -46
- package/src/tests/samples/assignment1.py +0 -58
- package/src/tests/samples/assignment10.py +0 -14
- package/src/tests/samples/assignment2.py +0 -40
- package/src/tests/samples/assignment3.py +0 -46
- package/src/tests/samples/assignment4.py +0 -20
- package/src/tests/samples/assignment5.py +0 -16
- package/src/tests/samples/assignment6.py +0 -25
- package/src/tests/samples/assignment7.py +0 -13
- package/src/tests/samples/assignment8.py +0 -40
- package/src/tests/samples/assignment9.py +0 -25
- package/src/tests/samples/assignmentExpr1.py +0 -23
- package/src/tests/samples/assignmentExpr2.py +0 -49
- package/src/tests/samples/assignmentExpr3.py +0 -27
- package/src/tests/samples/assignmentExpr4.py +0 -49
- package/src/tests/samples/assignmentExpr5.py +0 -15
- package/src/tests/samples/assignmentExpr6.py +0 -10
- package/src/tests/samples/assignmentExpr7.py +0 -13
- package/src/tests/samples/assignmentExpr8.py +0 -11
- package/src/tests/samples/assignmentExpr9.py +0 -28
- package/src/tests/samples/async1.py +0 -49
- package/src/tests/samples/augmentedAssignment1.py +0 -62
- package/src/tests/samples/augmentedAssignment2.py +0 -23
- package/src/tests/samples/augmentedAssignment3.py +0 -8
- package/src/tests/samples/await1.py +0 -23
- package/src/tests/samples/await2.py +0 -25
- package/src/tests/samples/badToken1.py +0 -6
- package/src/tests/samples/builtins1.py +0 -2
- package/src/tests/samples/call1.py +0 -93
- package/src/tests/samples/call2.py +0 -118
- package/src/tests/samples/call3.py +0 -168
- package/src/tests/samples/call4.py +0 -13
- package/src/tests/samples/call5.py +0 -95
- package/src/tests/samples/call6.py +0 -35
- package/src/tests/samples/call7.py +0 -57
- package/src/tests/samples/callSite1.py +0 -6
- package/src/tests/samples/callSite2.py +0 -12
- package/src/tests/samples/callable1.py +0 -53
- package/src/tests/samples/callable2.py +0 -58
- package/src/tests/samples/callable3.py +0 -28
- package/src/tests/samples/callable4.py +0 -32
- package/src/tests/samples/callable5.py +0 -40
- package/src/tests/samples/callable6.py +0 -83
- package/src/tests/samples/callbackProtocol1.py +0 -119
- package/src/tests/samples/callbackProtocol2.py +0 -29
- package/src/tests/samples/callbackProtocol3.py +0 -23
- package/src/tests/samples/callbackProtocol4.py +0 -73
- package/src/tests/samples/callbackProtocol5.py +0 -66
- package/src/tests/samples/callbackProtocol6.py +0 -66
- package/src/tests/samples/callbackProtocol7.py +0 -16
- package/src/tests/samples/callbackProtocol8.py +0 -16
- package/src/tests/samples/capturedVariable1.py +0 -106
- package/src/tests/samples/circular1.py +0 -16
- package/src/tests/samples/circular2.py +0 -38
- package/src/tests/samples/circularBaseClass.py +0 -17
- package/src/tests/samples/classGetItem1.py +0 -30
- package/src/tests/samples/classVar1.py +0 -41
- package/src/tests/samples/classVar2.py +0 -29
- package/src/tests/samples/classVar3.py +0 -46
- package/src/tests/samples/classVar4.py +0 -36
- package/src/tests/samples/classes1.py +0 -50
- package/src/tests/samples/classes3.py +0 -48
- package/src/tests/samples/classes4.py +0 -15
- package/src/tests/samples/classes5.py +0 -260
- package/src/tests/samples/classes6.py +0 -16
- package/src/tests/samples/classes7.py +0 -18
- package/src/tests/samples/classes8.py +0 -47
- package/src/tests/samples/codeFlow1.py +0 -65
- package/src/tests/samples/codeFlow2.py +0 -26
- package/src/tests/samples/codeFlow3.py +0 -8
- package/src/tests/samples/codeFlow4.py +0 -133
- package/src/tests/samples/codeFlow5.py +0 -10
- package/src/tests/samples/codeFlow6.py +0 -35
- package/src/tests/samples/codeFlow7.py +0 -35
- package/src/tests/samples/comparison1.py +0 -77
- package/src/tests/samples/comparison2.py +0 -37
- package/src/tests/samples/complex1.py +0 -17
- package/src/tests/samples/constant1.py +0 -40
- package/src/tests/samples/constants1.py +0 -64
- package/src/tests/samples/constructor1.py +0 -30
- package/src/tests/samples/constructor10.py +0 -19
- package/src/tests/samples/constructor11.py +0 -32
- package/src/tests/samples/constructor12.py +0 -20
- package/src/tests/samples/constructor13.py +0 -15
- package/src/tests/samples/constructor2.py +0 -180
- package/src/tests/samples/constructor3.py +0 -18
- package/src/tests/samples/constructor4.py +0 -25
- package/src/tests/samples/constructor5.py +0 -25
- package/src/tests/samples/constructor6.py +0 -70
- package/src/tests/samples/constructor7.py +0 -11
- package/src/tests/samples/constructor8.py +0 -99
- package/src/tests/samples/constructor9.py +0 -19
- package/src/tests/samples/coroutines1.py +0 -60
- package/src/tests/samples/coroutines2.py +0 -20
- package/src/tests/samples/coroutines3.py +0 -37
- package/src/tests/samples/dataclass1.py +0 -44
- package/src/tests/samples/dataclass10.py +0 -45
- package/src/tests/samples/dataclass11.py +0 -53
- package/src/tests/samples/dataclass12.py +0 -32
- package/src/tests/samples/dataclass13.py +0 -42
- package/src/tests/samples/dataclass14.py +0 -38
- package/src/tests/samples/dataclass15.py +0 -58
- package/src/tests/samples/dataclass16.py +0 -21
- package/src/tests/samples/dataclass17.py +0 -46
- package/src/tests/samples/dataclass18.py +0 -57
- package/src/tests/samples/dataclass19.py +0 -44
- package/src/tests/samples/dataclass2.py +0 -30
- package/src/tests/samples/dataclass20.py +0 -71
- package/src/tests/samples/dataclass21.py +0 -13
- package/src/tests/samples/dataclass3.py +0 -18
- package/src/tests/samples/dataclass4.py +0 -64
- package/src/tests/samples/dataclass5.py +0 -81
- package/src/tests/samples/dataclass6.py +0 -29
- package/src/tests/samples/dataclass7.py +0 -93
- package/src/tests/samples/dataclass8.py +0 -22
- package/src/tests/samples/dataclass9.py +0 -24
- package/src/tests/samples/dataclassPostInit1.py +0 -61
- package/src/tests/samples/dataclassTransform1.py +0 -71
- package/src/tests/samples/dataclassTransform2.py +0 -78
- package/src/tests/samples/dataclassTransform3.py +0 -83
- package/src/tests/samples/dataclassTransform4.py +0 -87
- package/src/tests/samples/decorator1.py +0 -20
- package/src/tests/samples/decorator2.py +0 -31
- package/src/tests/samples/decorator3.py +0 -27
- package/src/tests/samples/decorator4.py +0 -37
- package/src/tests/samples/decorator5.py +0 -29
- package/src/tests/samples/decorator6.py +0 -34
- package/src/tests/samples/defaultInitializer1.py +0 -26
- package/src/tests/samples/deprecated1.py +0 -37
- package/src/tests/samples/descriptor1.py +0 -134
- package/src/tests/samples/descriptor2.py +0 -29
- package/src/tests/samples/dictionary1.py +0 -42
- package/src/tests/samples/dictionary2.py +0 -14
- package/src/tests/samples/dictionary3.py +0 -30
- package/src/tests/samples/dictionary4.py +0 -106
- package/src/tests/samples/dunderAll1.py +0 -32
- package/src/tests/samples/dunderAll2.py +0 -16
- package/src/tests/samples/dunderAll3.pyi +0 -16
- package/src/tests/samples/duplicateDeclaration1.py +0 -115
- package/src/tests/samples/duplicateDeclaration2.py +0 -45
- package/src/tests/samples/duplicateImports1.py +0 -13
- package/src/tests/samples/ellipsis1.pyi +0 -48
- package/src/tests/samples/emptyContainers1.py +0 -89
- package/src/tests/samples/enums1.py +0 -52
- package/src/tests/samples/enums2.py +0 -15
- package/src/tests/samples/enums3.py +0 -24
- package/src/tests/samples/enums4.py +0 -23
- package/src/tests/samples/enums5.py +0 -16
- package/src/tests/samples/enums6.py +0 -33
- package/src/tests/samples/enums7.py +0 -54
- package/src/tests/samples/enums8.py +0 -14
- package/src/tests/samples/expressions1.py +0 -54
- package/src/tests/samples/expressions2.py +0 -29
- package/src/tests/samples/expressions3.py +0 -26
- package/src/tests/samples/expressions4.py +0 -23
- package/src/tests/samples/expressions5.py +0 -70
- package/src/tests/samples/expressions6.py +0 -14
- package/src/tests/samples/expressions7.py +0 -40
- package/src/tests/samples/expressions8.py +0 -26
- package/src/tests/samples/expressions9.py +0 -14
- package/src/tests/samples/final1.py +0 -14
- package/src/tests/samples/final2.py +0 -86
- package/src/tests/samples/final3.py +0 -179
- package/src/tests/samples/final4.pyi +0 -21
- package/src/tests/samples/final5.py +0 -18
- package/src/tests/samples/forLoop1.py +0 -88
- package/src/tests/samples/forLoop2.py +0 -48
- package/src/tests/samples/fstring1.py +0 -66
- package/src/tests/samples/fstring2.py +0 -12
- package/src/tests/samples/fstring3.py +0 -35
- package/src/tests/samples/fstring4.py +0 -17
- package/src/tests/samples/fstring5.py +0 -17
- package/src/tests/samples/fstring6.py +0 -14
- package/src/tests/samples/function1.py +0 -12
- package/src/tests/samples/function10.py +0 -20
- package/src/tests/samples/function11.py +0 -36
- package/src/tests/samples/function2.py +0 -7
- package/src/tests/samples/function3.py +0 -82
- package/src/tests/samples/function4.py +0 -13
- package/src/tests/samples/function6.py +0 -24
- package/src/tests/samples/function7.py +0 -13
- package/src/tests/samples/function8.py +0 -38
- package/src/tests/samples/function9.py +0 -75
- package/src/tests/samples/functionAnnotation1.py +0 -61
- package/src/tests/samples/functionAnnotation2.py +0 -26
- package/src/tests/samples/functionAnnotation3.py +0 -37
- package/src/tests/samples/functionAnnotation4.py +0 -22
- package/src/tests/samples/functionMember1.py +0 -18
- package/src/tests/samples/functionMember2.py +0 -45
- package/src/tests/samples/generators1.py +0 -122
- package/src/tests/samples/generators10.py +0 -18
- package/src/tests/samples/generators11.py +0 -27
- package/src/tests/samples/generators12.py +0 -25
- package/src/tests/samples/generators13.py +0 -65
- package/src/tests/samples/generators14.py +0 -19
- package/src/tests/samples/generators15.py +0 -26
- package/src/tests/samples/generators2.py +0 -31
- package/src/tests/samples/generators3.py +0 -42
- package/src/tests/samples/generators4.py +0 -33
- package/src/tests/samples/generators5.py +0 -24
- package/src/tests/samples/generators6.py +0 -14
- package/src/tests/samples/generators7.py +0 -18
- package/src/tests/samples/generators8.py +0 -12
- package/src/tests/samples/generators9.py +0 -19
- package/src/tests/samples/generic1.py +0 -41
- package/src/tests/samples/genericTypes1.py +0 -12
- package/src/tests/samples/genericTypes10.py +0 -38
- package/src/tests/samples/genericTypes11.py +0 -26
- package/src/tests/samples/genericTypes12.py +0 -14
- package/src/tests/samples/genericTypes13.py +0 -27
- package/src/tests/samples/genericTypes14.py +0 -22
- package/src/tests/samples/genericTypes15.py +0 -13
- package/src/tests/samples/genericTypes16.py +0 -15
- package/src/tests/samples/genericTypes17.py +0 -24
- package/src/tests/samples/genericTypes18.py +0 -135
- package/src/tests/samples/genericTypes19.py +0 -32
- package/src/tests/samples/genericTypes2.py +0 -40
- package/src/tests/samples/genericTypes20.py +0 -44
- package/src/tests/samples/genericTypes21.py +0 -29
- package/src/tests/samples/genericTypes22.py +0 -23
- package/src/tests/samples/genericTypes23.py +0 -27
- package/src/tests/samples/genericTypes24.py +0 -32
- package/src/tests/samples/genericTypes25.py +0 -37
- package/src/tests/samples/genericTypes26.py +0 -31
- package/src/tests/samples/genericTypes27.py +0 -14
- package/src/tests/samples/genericTypes28.py +0 -51
- package/src/tests/samples/genericTypes29.py +0 -24
- package/src/tests/samples/genericTypes3.py +0 -13
- package/src/tests/samples/genericTypes30.py +0 -32
- package/src/tests/samples/genericTypes31.py +0 -30
- package/src/tests/samples/genericTypes32.py +0 -25
- package/src/tests/samples/genericTypes33.py +0 -46
- package/src/tests/samples/genericTypes34.py +0 -54
- package/src/tests/samples/genericTypes35.py +0 -45
- package/src/tests/samples/genericTypes36.py +0 -35
- package/src/tests/samples/genericTypes37.py +0 -26
- package/src/tests/samples/genericTypes38.py +0 -15
- package/src/tests/samples/genericTypes39.py +0 -82
- package/src/tests/samples/genericTypes4.py +0 -37
- package/src/tests/samples/genericTypes40.py +0 -38
- package/src/tests/samples/genericTypes41.py +0 -16
- package/src/tests/samples/genericTypes42.py +0 -32
- package/src/tests/samples/genericTypes43.py +0 -24
- package/src/tests/samples/genericTypes44.py +0 -33
- package/src/tests/samples/genericTypes45.py +0 -43
- package/src/tests/samples/genericTypes46.py +0 -66
- package/src/tests/samples/genericTypes47.py +0 -39
- package/src/tests/samples/genericTypes48.py +0 -18
- package/src/tests/samples/genericTypes49.py +0 -41
- package/src/tests/samples/genericTypes5.py +0 -42
- package/src/tests/samples/genericTypes50.py +0 -62
- package/src/tests/samples/genericTypes51.py +0 -55
- package/src/tests/samples/genericTypes52.py +0 -34
- package/src/tests/samples/genericTypes53.py +0 -42
- package/src/tests/samples/genericTypes54.py +0 -31
- package/src/tests/samples/genericTypes55.py +0 -61
- package/src/tests/samples/genericTypes56.py +0 -19
- package/src/tests/samples/genericTypes57.py +0 -30
- package/src/tests/samples/genericTypes58.py +0 -52
- package/src/tests/samples/genericTypes59.py +0 -71
- package/src/tests/samples/genericTypes6.py +0 -49
- package/src/tests/samples/genericTypes60.py +0 -27
- package/src/tests/samples/genericTypes61.py +0 -34
- package/src/tests/samples/genericTypes62.py +0 -26
- package/src/tests/samples/genericTypes63.py +0 -32
- package/src/tests/samples/genericTypes64.py +0 -16
- package/src/tests/samples/genericTypes65.py +0 -15
- package/src/tests/samples/genericTypes66.py +0 -30
- package/src/tests/samples/genericTypes67.py +0 -57
- package/src/tests/samples/genericTypes68.py +0 -14
- package/src/tests/samples/genericTypes69.py +0 -45
- package/src/tests/samples/genericTypes7.py +0 -24
- package/src/tests/samples/genericTypes70.py +0 -31
- package/src/tests/samples/genericTypes71.py +0 -72
- package/src/tests/samples/genericTypes72.py +0 -24
- package/src/tests/samples/genericTypes73.py +0 -14
- package/src/tests/samples/genericTypes74.py +0 -23
- package/src/tests/samples/genericTypes75.py +0 -45
- package/src/tests/samples/genericTypes76.py +0 -107
- package/src/tests/samples/genericTypes77.py +0 -26
- package/src/tests/samples/genericTypes78.py +0 -23
- package/src/tests/samples/genericTypes79.py +0 -37
- package/src/tests/samples/genericTypes8.py +0 -26
- package/src/tests/samples/genericTypes80.py +0 -10
- package/src/tests/samples/genericTypes81.py +0 -32
- package/src/tests/samples/genericTypes82.py +0 -19
- package/src/tests/samples/genericTypes83.py +0 -28
- package/src/tests/samples/genericTypes84.py +0 -11
- package/src/tests/samples/genericTypes85.py +0 -20
- package/src/tests/samples/genericTypes86.py +0 -15
- package/src/tests/samples/genericTypes87.py +0 -21
- package/src/tests/samples/genericTypes88.py +0 -25
- package/src/tests/samples/genericTypes89.py +0 -17
- package/src/tests/samples/genericTypes9.py +0 -109
- package/src/tests/samples/genericTypes90.py +0 -12
- package/src/tests/samples/genericTypes91.py +0 -20
- package/src/tests/samples/import1.py +0 -7
- package/src/tests/samples/import10.py +0 -11
- package/src/tests/samples/import11.py +0 -11
- package/src/tests/samples/import12.py +0 -5
- package/src/tests/samples/import13.py +0 -6
- package/src/tests/samples/import14.py +0 -10
- package/src/tests/samples/import2.py +0 -27
- package/src/tests/samples/import3.py +0 -8
- package/src/tests/samples/import4.py +0 -15
- package/src/tests/samples/import5.py +0 -6
- package/src/tests/samples/import6.py +0 -17
- package/src/tests/samples/import7.py +0 -14
- package/src/tests/samples/import8.py +0 -7
- package/src/tests/samples/import9.py +0 -7
- package/src/tests/samples/inconsistentConstructor1.py +0 -23
- package/src/tests/samples/inconsistentSpaceTab1.py +0 -9
- package/src/tests/samples/inconsistentSpaceTab2.py +0 -10
- package/src/tests/samples/index1.py +0 -97
- package/src/tests/samples/inferredTypes1.py +0 -25
- package/src/tests/samples/initVar1.py +0 -23
- package/src/tests/samples/initsubclass1.py +0 -46
- package/src/tests/samples/initsubclass2.py +0 -16
- package/src/tests/samples/isinstance1.py +0 -57
- package/src/tests/samples/isinstance10.py +0 -15
- package/src/tests/samples/isinstance2.py +0 -28
- package/src/tests/samples/isinstance3.py +0 -59
- package/src/tests/samples/isinstance4.py +0 -57
- package/src/tests/samples/isinstance5.py +0 -8
- package/src/tests/samples/isinstance6.py +0 -19
- package/src/tests/samples/isinstance7.py +0 -42
- package/src/tests/samples/isinstance9.py +0 -26
- package/src/tests/samples/kwargsUnpack1.py +0 -116
- package/src/tests/samples/lambda1.py +0 -77
- package/src/tests/samples/lambda2.py +0 -26
- package/src/tests/samples/lambda3.py +0 -34
- package/src/tests/samples/lambda4.py +0 -70
- package/src/tests/samples/lambda5.py +0 -23
- package/src/tests/samples/lambda6.py +0 -15
- package/src/tests/samples/lines1.py +0 -14
- package/src/tests/samples/list1.py +0 -90
- package/src/tests/samples/listComprehension1.py +0 -45
- package/src/tests/samples/listComprehension2.py +0 -17
- package/src/tests/samples/listComprehension3.py +0 -12
- package/src/tests/samples/listComprehension4.py +0 -15
- package/src/tests/samples/listComprehension5.py +0 -20
- package/src/tests/samples/listComprehension6.py +0 -14
- package/src/tests/samples/listComprehension7.py +0 -15
- package/src/tests/samples/listComprehension8.py +0 -15
- package/src/tests/samples/literalString1.py +0 -43
- package/src/tests/samples/literals1.py +0 -48
- package/src/tests/samples/literals2.py +0 -30
- package/src/tests/samples/literals3.py +0 -40
- package/src/tests/samples/literals4.py +0 -10
- package/src/tests/samples/literals5.py +0 -28
- package/src/tests/samples/literals6.py +0 -90
- package/src/tests/samples/literals7.py +0 -38
- package/src/tests/samples/loops1.py +0 -45
- package/src/tests/samples/loops10.py +0 -11
- package/src/tests/samples/loops11.py +0 -22
- package/src/tests/samples/loops12.py +0 -18
- package/src/tests/samples/loops13.py +0 -13
- package/src/tests/samples/loops14.py +0 -22
- package/src/tests/samples/loops15.py +0 -22
- package/src/tests/samples/loops16.py +0 -322
- package/src/tests/samples/loops17.py +0 -9
- package/src/tests/samples/loops18.py +0 -23
- package/src/tests/samples/loops19.py +0 -14
- package/src/tests/samples/loops2.py +0 -25
- package/src/tests/samples/loops20.py +0 -41
- package/src/tests/samples/loops21.py +0 -18
- package/src/tests/samples/loops22.py +0 -21
- package/src/tests/samples/loops23.py +0 -16
- package/src/tests/samples/loops24.py +0 -12
- package/src/tests/samples/loops25.py +0 -45
- package/src/tests/samples/loops26.py +0 -12
- package/src/tests/samples/loops3.py +0 -11
- package/src/tests/samples/loops4.py +0 -17
- package/src/tests/samples/loops5.py +0 -14
- package/src/tests/samples/loops6.py +0 -25
- package/src/tests/samples/loops7.py +0 -14
- package/src/tests/samples/loops8.py +0 -17
- package/src/tests/samples/loops9.py +0 -25
- package/src/tests/samples/match1.py +0 -190
- package/src/tests/samples/match10.py +0 -67
- package/src/tests/samples/match2.py +0 -340
- package/src/tests/samples/match3.py +0 -364
- package/src/tests/samples/match4.py +0 -100
- package/src/tests/samples/match5.py +0 -70
- package/src/tests/samples/match6.py +0 -64
- package/src/tests/samples/match7.py +0 -65
- package/src/tests/samples/match8.py +0 -19
- package/src/tests/samples/match9.py +0 -53
- package/src/tests/samples/maxParseDepth1.py +0 -499
- package/src/tests/samples/maxParseDepth2.py +0 -16
- package/src/tests/samples/memberAccess1.py +0 -70
- package/src/tests/samples/memberAccess10.py +0 -65
- package/src/tests/samples/memberAccess11.py +0 -37
- package/src/tests/samples/memberAccess12.py +0 -36
- package/src/tests/samples/memberAccess13.py +0 -17
- package/src/tests/samples/memberAccess14.py +0 -63
- package/src/tests/samples/memberAccess15.py +0 -20
- package/src/tests/samples/memberAccess16.py +0 -12
- package/src/tests/samples/memberAccess17.py +0 -31
- package/src/tests/samples/memberAccess18.py +0 -31
- package/src/tests/samples/memberAccess2.py +0 -45
- package/src/tests/samples/memberAccess3.py +0 -64
- package/src/tests/samples/memberAccess4.py +0 -91
- package/src/tests/samples/memberAccess5.py +0 -26
- package/src/tests/samples/memberAccess6.py +0 -52
- package/src/tests/samples/memberAccess7.py +0 -36
- package/src/tests/samples/memberAccess8.py +0 -75
- package/src/tests/samples/memberAccess9.py +0 -11
- package/src/tests/samples/metaclass1.py +0 -7
- package/src/tests/samples/metaclass2.py +0 -35
- package/src/tests/samples/metaclass3.py +0 -43
- package/src/tests/samples/metaclass4.py +0 -26
- package/src/tests/samples/metaclass5.py +0 -33
- package/src/tests/samples/metaclass6.py +0 -15
- package/src/tests/samples/metaclass7.py +0 -38
- package/src/tests/samples/metaclass8.py +0 -20
- package/src/tests/samples/metaclass9.py +0 -77
- package/src/tests/samples/methodOverride1.py +0 -507
- package/src/tests/samples/methodOverride2.py +0 -74
- package/src/tests/samples/methodOverride3.py +0 -111
- package/src/tests/samples/methodOverride4.py +0 -36
- package/src/tests/samples/missingSuper1.py +0 -73
- package/src/tests/samples/module1.py +0 -13
- package/src/tests/samples/module2.py +0 -7
- package/src/tests/samples/mro1.py +0 -16
- package/src/tests/samples/mro2.py +0 -45
- package/src/tests/samples/mro3.py +0 -30
- package/src/tests/samples/mro4.py +0 -30
- package/src/tests/samples/nameBindings1.py +0 -48
- package/src/tests/samples/nameBindings2.py +0 -9
- package/src/tests/samples/nameBindings3.py +0 -36
- package/src/tests/samples/nameBindings4.py +0 -10
- package/src/tests/samples/nameBindings5.py +0 -53
- package/src/tests/samples/namedTuples1.py +0 -103
- package/src/tests/samples/namedTuples2.py +0 -56
- package/src/tests/samples/namedTuples3.py +0 -15
- package/src/tests/samples/namedTuples4.py +0 -24
- package/src/tests/samples/namedTuples5.py +0 -15
- package/src/tests/samples/namedTuples6.py +0 -31
- package/src/tests/samples/namedTuples7.py +0 -27
- package/src/tests/samples/never1.py +0 -12
- package/src/tests/samples/never2.py +0 -43
- package/src/tests/samples/newType1.py +0 -34
- package/src/tests/samples/newType2.py +0 -25
- package/src/tests/samples/newType3.py +0 -34
- package/src/tests/samples/newType4.py +0 -8
- package/src/tests/samples/none1.py +0 -29
- package/src/tests/samples/none2.py +0 -22
- package/src/tests/samples/noreturn1.py +0 -78
- package/src/tests/samples/noreturn2.py +0 -37
- package/src/tests/samples/noreturn3.py +0 -16
- package/src/tests/samples/noreturn4.py +0 -29
- package/src/tests/samples/operators1.py +0 -101
- package/src/tests/samples/operators2.py +0 -30
- package/src/tests/samples/operators3.py +0 -8
- package/src/tests/samples/operators4.py +0 -22
- package/src/tests/samples/operators5.py +0 -5
- package/src/tests/samples/operators6.py +0 -10
- package/src/tests/samples/operators7.py +0 -24
- package/src/tests/samples/operators8.py +0 -125
- package/src/tests/samples/optional1.py +0 -77
- package/src/tests/samples/optional2.py +0 -23
- package/src/tests/samples/overload1.py +0 -50
- package/src/tests/samples/overload10.py +0 -48
- package/src/tests/samples/overload2.py +0 -37
- package/src/tests/samples/overload3.py +0 -29
- package/src/tests/samples/overload4.py +0 -46
- package/src/tests/samples/overload5.py +0 -333
- package/src/tests/samples/overload6.py +0 -64
- package/src/tests/samples/overload7.py +0 -376
- package/src/tests/samples/overload8.py +0 -89
- package/src/tests/samples/overload9.py +0 -19
- package/src/tests/samples/package1/__init__.py +0 -3
- package/src/tests/samples/package1/psyche/pysche.py +0 -4
- package/src/tests/samples/package1/psyche.py +0 -4
- package/src/tests/samples/package1/sub/__init__.py +0 -5
- package/src/tests/samples/package1/sub.py +0 -4
- package/src/tests/samples/package1/sub.pyi +0 -2
- package/src/tests/samples/paramInference1.py +0 -27
- package/src/tests/samples/paramNames1.py +0 -39
- package/src/tests/samples/paramSpec1.py +0 -64
- package/src/tests/samples/paramSpec10.py +0 -57
- package/src/tests/samples/paramSpec11.py +0 -36
- package/src/tests/samples/paramSpec12.py +0 -88
- package/src/tests/samples/paramSpec13.py +0 -112
- package/src/tests/samples/paramSpec14.py +0 -30
- package/src/tests/samples/paramSpec15.py +0 -28
- package/src/tests/samples/paramSpec16.py +0 -28
- package/src/tests/samples/paramSpec17.py +0 -34
- package/src/tests/samples/paramSpec18.py +0 -43
- package/src/tests/samples/paramSpec19.py +0 -93
- package/src/tests/samples/paramSpec2.py +0 -29
- package/src/tests/samples/paramSpec20.py +0 -87
- package/src/tests/samples/paramSpec21.py +0 -58
- package/src/tests/samples/paramSpec22.py +0 -26
- package/src/tests/samples/paramSpec23.py +0 -21
- package/src/tests/samples/paramSpec24.py +0 -67
- package/src/tests/samples/paramSpec25.py +0 -36
- package/src/tests/samples/paramSpec26.py +0 -25
- package/src/tests/samples/paramSpec27.py +0 -57
- package/src/tests/samples/paramSpec28.py +0 -39
- package/src/tests/samples/paramSpec29.py +0 -37
- package/src/tests/samples/paramSpec3.py +0 -71
- package/src/tests/samples/paramSpec30.py +0 -49
- package/src/tests/samples/paramSpec31.py +0 -16
- package/src/tests/samples/paramSpec32.py +0 -57
- package/src/tests/samples/paramSpec33.py +0 -29
- package/src/tests/samples/paramSpec34.py +0 -29
- package/src/tests/samples/paramSpec35.py +0 -24
- package/src/tests/samples/paramSpec36.py +0 -43
- package/src/tests/samples/paramSpec37.py +0 -25
- package/src/tests/samples/paramSpec4.py +0 -109
- package/src/tests/samples/paramSpec5.py +0 -29
- package/src/tests/samples/paramSpec6.py +0 -17
- package/src/tests/samples/paramSpec7.py +0 -22
- package/src/tests/samples/paramSpec8.py +0 -45
- package/src/tests/samples/paramSpec9.py +0 -57
- package/src/tests/samples/paramType1.py +0 -71
- package/src/tests/samples/parameters1.py +0 -16
- package/src/tests/samples/partial1.py +0 -163
- package/src/tests/samples/partial2.py +0 -31
- package/src/tests/samples/private1.py +0 -55
- package/src/tests/samples/private2.py +0 -11
- package/src/tests/samples/project1/pyrightconfig.json +0 -5
- package/src/tests/samples/project1/sample1.py +0 -0
- package/src/tests/samples/project1/subfolder1/sample2.py +0 -0
- package/src/tests/samples/project1/subfolder1/subfolder1-1/sample3.py +0 -0
- package/src/tests/samples/project2/pyrightconfig.json +0 -3
- package/src/tests/samples/project3/pyrightconfig.json +0 -7
- package/src/tests/samples/project4/presentfile.py +0 -0
- package/src/tests/samples/project4/pyrightconfig.json +0 -11
- package/src/tests/samples/project4/subfolder/presentfile2.py +0 -0
- package/src/tests/samples/project4/subfolder/presentfile3.py +0 -0
- package/src/tests/samples/project5/pyrightconfig.json +0 -4
- package/src/tests/samples/project6/app1.py +0 -0
- package/src/tests/samples/project6/app2.py +0 -0
- package/src/tests/samples/project6/projectA/foo/__init__.py +0 -0
- package/src/tests/samples/project6/projectA/foo/bar/__init__.py +0 -0
- package/src/tests/samples/project6/projectB/foo/__init__.py +0 -0
- package/src/tests/samples/project6/projectB/foo/baz/__init__.py +0 -0
- package/src/tests/samples/project_src/src/module1.py +0 -0
- package/src/tests/samples/project_src_is_pkg/src/__init__.py +0 -0
- package/src/tests/samples/project_src_is_pkg/src/module1.py +0 -0
- package/src/tests/samples/project_src_with_config_extra_paths/pyrightconfig.json +0 -3
- package/src/tests/samples/project_src_with_config_extra_paths/src/module1.py +0 -0
- package/src/tests/samples/project_src_with_config_no_extra_paths/pyrightconfig.json +0 -2
- package/src/tests/samples/project_src_with_config_no_extra_paths/src/module1.py +0 -0
- package/src/tests/samples/project_src_with_extra_paths/src/_vendored/vendored1.py +0 -1
- package/src/tests/samples/project_src_with_extra_paths/src/module1.py +0 -2
- package/src/tests/samples/project_with_pyproject_toml/pyproject.toml +0 -7
- package/src/tests/samples/project_with_venv_auto_detect_exclude/myvenv/Lib/site-packages/library1.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_exclude/myvenv/pyvenv.cfg +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_exclude/pyrightconfig.json +0 -2
- package/src/tests/samples/project_with_venv_auto_detect_exclude/sample1.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_exclude/subfolder1/sample2.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_exclude/subfolder1/subfolder1-1/sample3.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/excluded/excluded1.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/myvenv/Lib/site-packages/library1.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/myvenv/pyvenv.cfg +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/pyrightconfig.json +0 -3
- package/src/tests/samples/project_with_venv_auto_detect_include/sample1.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/subfolder1/sample2.py +0 -0
- package/src/tests/samples/project_with_venv_auto_detect_include/subfolder1/subfolder1-1/sample3.py +0 -0
- package/src/tests/samples/properties1.py +0 -64
- package/src/tests/samples/properties10.py +0 -19
- package/src/tests/samples/properties11.py +0 -45
- package/src/tests/samples/properties12.py +0 -23
- package/src/tests/samples/properties13.py +0 -15
- package/src/tests/samples/properties2.py +0 -34
- package/src/tests/samples/properties3.py +0 -93
- package/src/tests/samples/properties4.py +0 -17
- package/src/tests/samples/properties5.py +0 -29
- package/src/tests/samples/properties6.py +0 -35
- package/src/tests/samples/properties7.py +0 -30
- package/src/tests/samples/properties8.py +0 -26
- package/src/tests/samples/properties9.py +0 -24
- package/src/tests/samples/protocol1.py +0 -132
- package/src/tests/samples/protocol10.py +0 -36
- package/src/tests/samples/protocol11.py +0 -32
- package/src/tests/samples/protocol12.py +0 -12
- package/src/tests/samples/protocol13.py +0 -26
- package/src/tests/samples/protocol14.py +0 -27
- package/src/tests/samples/protocol15.py +0 -27
- package/src/tests/samples/protocol16.py +0 -22
- package/src/tests/samples/protocol17.py +0 -94
- package/src/tests/samples/protocol18.py +0 -27
- package/src/tests/samples/protocol19.py +0 -39
- package/src/tests/samples/protocol2.py +0 -38
- package/src/tests/samples/protocol20.py +0 -22
- package/src/tests/samples/protocol21.py +0 -26
- package/src/tests/samples/protocol22.py +0 -43
- package/src/tests/samples/protocol23.py +0 -41
- package/src/tests/samples/protocol24.py +0 -74
- package/src/tests/samples/protocol25.py +0 -31
- package/src/tests/samples/protocol26.py +0 -40
- package/src/tests/samples/protocol27.py +0 -76
- package/src/tests/samples/protocol28.py +0 -32
- package/src/tests/samples/protocol29.py +0 -26
- package/src/tests/samples/protocol3.py +0 -110
- package/src/tests/samples/protocol30.py +0 -30
- package/src/tests/samples/protocol31.py +0 -22
- package/src/tests/samples/protocol32.py +0 -67
- package/src/tests/samples/protocol33.py +0 -39
- package/src/tests/samples/protocol34.py +0 -21
- package/src/tests/samples/protocol4.py +0 -22
- package/src/tests/samples/protocol5.py +0 -25
- package/src/tests/samples/protocol6.py +0 -65
- package/src/tests/samples/protocol7.py +0 -24
- package/src/tests/samples/protocol8.py +0 -34
- package/src/tests/samples/protocol9.py +0 -35
- package/src/tests/samples/protocolModule1.py +0 -15
- package/src/tests/samples/protocolModule2.py +0 -83
- package/src/tests/samples/protocolModule3.py +0 -14
- package/src/tests/samples/protocolModule4.py +0 -26
- package/src/tests/samples/pseudoGeneric1.py +0 -20
- package/src/tests/samples/pyrightIgnore1.py +0 -11
- package/src/tests/samples/pyrightIgnore2.py +0 -24
- package/src/tests/samples/python2.py +0 -31
- package/src/tests/samples/recursiveTypeAlias1.py +0 -79
- package/src/tests/samples/recursiveTypeAlias2.py +0 -32
- package/src/tests/samples/recursiveTypeAlias3.py +0 -26
- package/src/tests/samples/recursiveTypeAlias4.py +0 -55
- package/src/tests/samples/recursiveTypeAlias5.pyi +0 -10
- package/src/tests/samples/recursiveTypeAlias6.py +0 -25
- package/src/tests/samples/recursiveTypeAlias7.py +0 -15
- package/src/tests/samples/recursiveTypeAlias8.py +0 -38
- package/src/tests/samples/recursiveTypeAlias9.py +0 -22
- package/src/tests/samples/required1.py +0 -47
- package/src/tests/samples/required2.py +0 -56
- package/src/tests/samples/required3.py +0 -22
- package/src/tests/samples/returnTypes1.py +0 -26
- package/src/tests/samples/revealedType1.py +0 -30
- package/src/tests/samples/sample1.py +0 -6
- package/src/tests/samples/self1.py +0 -93
- package/src/tests/samples/self2.py +0 -195
- package/src/tests/samples/self3.py +0 -9
- package/src/tests/samples/self4.py +0 -18
- package/src/tests/samples/self5.py +0 -26
- package/src/tests/samples/setComprehension1.py +0 -34
- package/src/tests/samples/slots1.py +0 -63
- package/src/tests/samples/slots2.py +0 -38
- package/src/tests/samples/slots3.py +0 -35
- package/src/tests/samples/specialization1.py +0 -78
- package/src/tests/samples/specialization2.py +0 -51
- package/src/tests/samples/staticExpressions1.py +0 -52
- package/src/tests/samples/strings1.py +0 -22
- package/src/tests/samples/subscript1.py +0 -74
- package/src/tests/samples/subscript2.py +0 -55
- package/src/tests/samples/subscript3.py +0 -135
- package/src/tests/samples/suiteExpectedColon1.py +0 -4
- package/src/tests/samples/suiteExpectedColon2.py +0 -2
- package/src/tests/samples/suiteExpectedColon3.py +0 -2
- package/src/tests/samples/super1.py +0 -57
- package/src/tests/samples/super2.py +0 -29
- package/src/tests/samples/super3.py +0 -10
- package/src/tests/samples/super4.py +0 -24
- package/src/tests/samples/super5.py +0 -28
- package/src/tests/samples/super6.py +0 -17
- package/src/tests/samples/super7.py +0 -52
- package/src/tests/samples/super8.py +0 -7
- package/src/tests/samples/super9.py +0 -36
- package/src/tests/samples/test_file1.py +0 -0
- package/src/tests/samples/threePartVersion1.py +0 -33
- package/src/tests/samples/totalOrdering1.py +0 -52
- package/src/tests/samples/tryExcept1.py +0 -39
- package/src/tests/samples/tryExcept10.py +0 -12
- package/src/tests/samples/tryExcept2.py +0 -16
- package/src/tests/samples/tryExcept3.py +0 -12
- package/src/tests/samples/tryExcept4.py +0 -28
- package/src/tests/samples/tryExcept5.py +0 -30
- package/src/tests/samples/tryExcept6.py +0 -27
- package/src/tests/samples/tryExcept7.py +0 -17
- package/src/tests/samples/tryExcept8.py +0 -69
- package/src/tests/samples/tryExcept9.py +0 -42
- package/src/tests/samples/tupleUnpack1.py +0 -63
- package/src/tests/samples/tupleUnpack2.py +0 -56
- package/src/tests/samples/tupleUnpack3.py +0 -28
- package/src/tests/samples/tuples1.py +0 -185
- package/src/tests/samples/tuples10.py +0 -30
- package/src/tests/samples/tuples11.py +0 -21
- package/src/tests/samples/tuples12.py +0 -31
- package/src/tests/samples/tuples13.py +0 -26
- package/src/tests/samples/tuples15.py +0 -16
- package/src/tests/samples/tuples16.py +0 -14
- package/src/tests/samples/tuples2.py +0 -23
- package/src/tests/samples/tuples3.py +0 -15
- package/src/tests/samples/tuples4.py +0 -21
- package/src/tests/samples/tuples5.py +0 -16
- package/src/tests/samples/tuples6.py +0 -56
- package/src/tests/samples/tuples7.py +0 -61
- package/src/tests/samples/tuples8.py +0 -98
- package/src/tests/samples/tuples9.py +0 -17
- package/src/tests/samples/typeAlias1.py +0 -37
- package/src/tests/samples/typeAlias10.py +0 -45
- package/src/tests/samples/typeAlias11.py +0 -37
- package/src/tests/samples/typeAlias12.py +0 -20
- package/src/tests/samples/typeAlias13.py +0 -53
- package/src/tests/samples/typeAlias14.py +0 -29
- package/src/tests/samples/typeAlias15.py +0 -24
- package/src/tests/samples/typeAlias16.py +0 -24
- package/src/tests/samples/typeAlias2.py +0 -26
- package/src/tests/samples/typeAlias3.py +0 -35
- package/src/tests/samples/typeAlias4.py +0 -68
- package/src/tests/samples/typeAlias5.py +0 -56
- package/src/tests/samples/typeAlias6.py +0 -51
- package/src/tests/samples/typeAlias7.py +0 -50
- package/src/tests/samples/typeAlias8.py +0 -24
- package/src/tests/samples/typeAlias9.py +0 -35
- package/src/tests/samples/typeGuard1.py +0 -68
- package/src/tests/samples/typeGuard2.py +0 -58
- package/src/tests/samples/typeGuard3.py +0 -98
- package/src/tests/samples/typeIgnore1.py +0 -10
- package/src/tests/samples/typeIgnore2.py +0 -20
- package/src/tests/samples/typeIgnore3.py +0 -22
- package/src/tests/samples/typeIgnore4.py +0 -10
- package/src/tests/samples/typeIgnore5.py +0 -7
- package/src/tests/samples/typeNarrowing1.py +0 -56
- package/src/tests/samples/typeNarrowing2.py +0 -14
- package/src/tests/samples/typeNarrowing3.py +0 -47
- package/src/tests/samples/typeNarrowing4.py +0 -24
- package/src/tests/samples/typeNarrowing5.py +0 -19
- package/src/tests/samples/typeNarrowing6.py +0 -27
- package/src/tests/samples/typeNarrowing7.py +0 -71
- package/src/tests/samples/typeNarrowingAssert1.py +0 -24
- package/src/tests/samples/typeNarrowingCallable1.py +0 -78
- package/src/tests/samples/typeNarrowingEnum1.py +0 -58
- package/src/tests/samples/typeNarrowingEnum2.py +0 -71
- package/src/tests/samples/typeNarrowingFalsy1.py +0 -50
- package/src/tests/samples/typeNarrowingIn1.py +0 -97
- package/src/tests/samples/typeNarrowingIsNone1.py +0 -56
- package/src/tests/samples/typeNarrowingIsNone2.py +0 -8
- package/src/tests/samples/typeNarrowingIsNoneTuple1.py +0 -42
- package/src/tests/samples/typeNarrowingIsNoneTuple2.py +0 -35
- package/src/tests/samples/typeNarrowingIsinstance1.py +0 -162
- package/src/tests/samples/typeNarrowingIsinstance2.py +0 -14
- package/src/tests/samples/typeNarrowingIsinstance3.py +0 -78
- package/src/tests/samples/typeNarrowingIsinstance4.py +0 -50
- package/src/tests/samples/typeNarrowingIsinstance5.py +0 -39
- package/src/tests/samples/typeNarrowingIsinstance6.py +0 -77
- package/src/tests/samples/typeNarrowingIsinstance7.py +0 -19
- package/src/tests/samples/typeNarrowingIsinstance8.py +0 -19
- package/src/tests/samples/typeNarrowingLiteral1.py +0 -35
- package/src/tests/samples/typeNarrowingLiteral2.py +0 -63
- package/src/tests/samples/typeNarrowingLiteralMember1.py +0 -140
- package/src/tests/samples/typeNarrowingLocalConst1.py +0 -136
- package/src/tests/samples/typeNarrowingNoneMember1.py +0 -102
- package/src/tests/samples/typeNarrowingTuple1.py +0 -23
- package/src/tests/samples/typeNarrowingTupleLength1.py +0 -47
- package/src/tests/samples/typeNarrowingTypeIs1.py +0 -95
- package/src/tests/samples/typeNarrowingTypedDict1.py +0 -99
- package/src/tests/samples/typeNarrowingTypedDict2.py +0 -35
- package/src/tests/samples/typeNarrowingTypedDict3.py +0 -45
- package/src/tests/samples/typePromotions1.py +0 -30
- package/src/tests/samples/typeVar1.py +0 -23
- package/src/tests/samples/typeVar10.py +0 -21
- package/src/tests/samples/typeVar11.py +0 -12
- package/src/tests/samples/typeVar2.py +0 -26
- package/src/tests/samples/typeVar3.py +0 -73
- package/src/tests/samples/typeVar4.py +0 -45
- package/src/tests/samples/typeVar5.py +0 -75
- package/src/tests/samples/typeVar6.py +0 -115
- package/src/tests/samples/typeVar7.py +0 -171
- package/src/tests/samples/typeVar8.py +0 -30
- package/src/tests/samples/typeVar9.py +0 -118
- package/src/tests/samples/typedDict1.py +0 -63
- package/src/tests/samples/typedDict10.py +0 -34
- package/src/tests/samples/typedDict11.py +0 -12
- package/src/tests/samples/typedDict12.py +0 -103
- package/src/tests/samples/typedDict13.py +0 -14
- package/src/tests/samples/typedDict14.py +0 -25
- package/src/tests/samples/typedDict15.py +0 -53
- package/src/tests/samples/typedDict16.py +0 -103
- package/src/tests/samples/typedDict17.py +0 -24
- package/src/tests/samples/typedDict18.py +0 -43
- package/src/tests/samples/typedDict2.py +0 -56
- package/src/tests/samples/typedDict3.py +0 -40
- package/src/tests/samples/typedDict4.py +0 -68
- package/src/tests/samples/typedDict5.py +0 -50
- package/src/tests/samples/typedDict6.py +0 -77
- package/src/tests/samples/typedDict7.py +0 -22
- package/src/tests/samples/typedDict8.py +0 -19
- package/src/tests/samples/typedDict9.py +0 -22
- package/src/tests/samples/unbound1.py +0 -18
- package/src/tests/samples/unbound2.py +0 -12
- package/src/tests/samples/unbound3.py +0 -13
- package/src/tests/samples/unbound4.py +0 -25
- package/src/tests/samples/unicode1.py +0 -39
- package/src/tests/samples/uninitializedVariable1.py +0 -27
- package/src/tests/samples/unions1.py +0 -79
- package/src/tests/samples/unions2.py +0 -15
- package/src/tests/samples/unions3.py +0 -48
- package/src/tests/samples/unions4.py +0 -20
- package/src/tests/samples/unions5.py +0 -43
- package/src/tests/samples/unnecessaryCast1.py +0 -13
- package/src/tests/samples/unnecessaryIsInstance1.py +0 -91
- package/src/tests/samples/unnecessaryIsSubclass1.py +0 -22
- package/src/tests/samples/unpack1.py +0 -56
- package/src/tests/samples/unpack2.py +0 -27
- package/src/tests/samples/unpack3.py +0 -16
- package/src/tests/samples/unpack4.py +0 -15
- package/src/tests/samples/unreachable1.py +0 -112
- package/src/tests/samples/unusedCallResult1.py +0 -67
- package/src/tests/samples/unusedCoroutine1.py +0 -23
- package/src/tests/samples/unusedExpression1.py +0 -34
- package/src/tests/samples/unusedVariable1.py +0 -21
- package/src/tests/samples/variadicTypeVar1.py +0 -51
- package/src/tests/samples/variadicTypeVar10.py +0 -65
- package/src/tests/samples/variadicTypeVar11.py +0 -72
- package/src/tests/samples/variadicTypeVar12.py +0 -26
- package/src/tests/samples/variadicTypeVar13.py +0 -35
- package/src/tests/samples/variadicTypeVar14.py +0 -72
- package/src/tests/samples/variadicTypeVar2.py +0 -63
- package/src/tests/samples/variadicTypeVar3.py +0 -86
- package/src/tests/samples/variadicTypeVar4.py +0 -71
- package/src/tests/samples/variadicTypeVar5.py +0 -131
- package/src/tests/samples/variadicTypeVar6.py +0 -78
- package/src/tests/samples/variadicTypeVar7.py +0 -59
- package/src/tests/samples/variadicTypeVar8.py +0 -116
- package/src/tests/samples/variadicTypeVar9.py +0 -38
- package/src/tests/samples/with1.py +0 -117
- package/src/tests/samples/with2.py +0 -63
- package/src/tests/samples/with3.py +0 -66
- package/src/tests/samples/with4.py +0 -24
- package/src/tests/samples/with5.py +0 -33
- package/src/tests/samples/zipfs/bad.egg +0 -1
- package/src/tests/samples/zipfs/bad.zip +0 -1
- package/src/tests/samples/zipfs/basic.egg +0 -0
- package/src/tests/samples/zipfs/basic.zip +0 -0
- package/src/tests/samples/zipfs/corrupt.egg +0 -0
- package/src/tests/samples/zipfs/corrupt.zip +0 -0
- package/src/tests/sourceFile.test.ts +0 -25
- package/src/tests/stringUtils.test.ts +0 -63
- package/src/tests/symbolNameUtils.test.ts +0 -77
- package/src/tests/testState.test.ts +0 -579
- package/src/tests/testUtils.ts +0 -251
- package/src/tests/tokenizer.test.ts +0 -1534
- package/src/tests/typeEvaluator1.test.ts +0 -1372
- package/src/tests/typeEvaluator2.test.ts +0 -1253
- package/src/tests/typeEvaluator3.test.ts +0 -1279
- package/src/tests/typeEvaluator4.test.ts +0 -1178
- package/src/tests/updateSymbolReference.test.ts +0 -1107
- package/src/tests/zipfs.test.ts +0 -116
- package/src/workspaceMap.ts +0 -76
@@ -1,1548 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* codeFlowEngine.ts
|
3
|
-
* Copyright (c) Microsoft Corporation.
|
4
|
-
* Licensed under the MIT license.
|
5
|
-
* Author: Eric Traut
|
6
|
-
*
|
7
|
-
* Code that traverses the code flow graph to determine the (narrowed)
|
8
|
-
* type of a variable or expression or the reachability of a statement.
|
9
|
-
*
|
10
|
-
* This is largely based on the code flow engine in the
|
11
|
-
* TypeScript compiler.
|
12
|
-
*/
|
13
|
-
|
14
|
-
import { assert, fail } from '../common/debug';
|
15
|
-
import { convertOffsetToPosition } from '../common/positionUtils';
|
16
|
-
import { ExpressionNode, ParseNode, ParseNodeType } from '../parser/parseNodes';
|
17
|
-
import { getFileInfo, getImportInfo } from './analyzerNodeInfo';
|
18
|
-
import {
|
19
|
-
CodeFlowReferenceExpressionNode,
|
20
|
-
createKeyForReference,
|
21
|
-
createKeysForReferenceSubexpressions,
|
22
|
-
FlowAssignment,
|
23
|
-
FlowBranchLabel,
|
24
|
-
FlowCall,
|
25
|
-
FlowCondition,
|
26
|
-
FlowExhaustedMatch,
|
27
|
-
FlowFlags,
|
28
|
-
FlowLabel,
|
29
|
-
FlowNarrowForPattern,
|
30
|
-
FlowNode,
|
31
|
-
FlowPostContextManagerLabel,
|
32
|
-
FlowPostFinally,
|
33
|
-
FlowPreFinallyGate,
|
34
|
-
FlowVariableAnnotation,
|
35
|
-
FlowWildcardImport,
|
36
|
-
} from './codeFlowTypes';
|
37
|
-
import { formatControlFlowGraph } from './codeFlowUtils';
|
38
|
-
import { isMatchingExpression, isPartialMatchingExpression, printExpression } from './parseTreeUtils';
|
39
|
-
import {
|
40
|
-
CachedType,
|
41
|
-
IncompleteSubtypeInfo,
|
42
|
-
IncompleteType,
|
43
|
-
isIncompleteType,
|
44
|
-
SpeculativeTypeTracker,
|
45
|
-
TypeCache,
|
46
|
-
} from './typeCache';
|
47
|
-
import { EvaluatorFlags, TypeEvaluator, TypeResult } from './typeEvaluatorTypes';
|
48
|
-
import { getTypeNarrowingCallback } from './typeGuards';
|
49
|
-
import {
|
50
|
-
ClassType,
|
51
|
-
combineTypes,
|
52
|
-
FunctionType,
|
53
|
-
isClass,
|
54
|
-
isClassInstance,
|
55
|
-
isFunction,
|
56
|
-
isInstantiableClass,
|
57
|
-
isNever,
|
58
|
-
isOverloadedFunction,
|
59
|
-
isTypeSame,
|
60
|
-
isTypeVar,
|
61
|
-
maxTypeRecursionCount,
|
62
|
-
NeverType,
|
63
|
-
removeIncompleteUnknownFromUnion,
|
64
|
-
Type,
|
65
|
-
TypeVarType,
|
66
|
-
UnboundType,
|
67
|
-
UnknownType,
|
68
|
-
} from './types';
|
69
|
-
import { ClassMemberLookupFlags, doForEachSubtype, isTypeAliasPlaceholder, lookUpClassMember } from './typeUtils';
|
70
|
-
|
71
|
-
export interface FlowNodeTypeResult {
|
72
|
-
type: Type | undefined;
|
73
|
-
isIncomplete: boolean;
|
74
|
-
isRecursionSentinel?: boolean;
|
75
|
-
generationCount?: number | undefined;
|
76
|
-
incompleteType?: Type | undefined;
|
77
|
-
incompleteSubtypes?: IncompleteSubtypeInfo[] | undefined;
|
78
|
-
}
|
79
|
-
|
80
|
-
export interface CodeFlowAnalyzer {
|
81
|
-
getTypeFromCodeFlow: (
|
82
|
-
flowNode: FlowNode,
|
83
|
-
reference: CodeFlowReferenceExpressionNode | undefined,
|
84
|
-
targetSymbolId: number | undefined,
|
85
|
-
initialType: Type | undefined,
|
86
|
-
isInitialTypeIncomplete: boolean,
|
87
|
-
ignoreNoReturn: boolean
|
88
|
-
) => FlowNodeTypeResult;
|
89
|
-
}
|
90
|
-
|
91
|
-
export interface CodeFlowEngine {
|
92
|
-
createCodeFlowAnalyzer: () => CodeFlowAnalyzer;
|
93
|
-
isFlowNodeReachable: (flowNode: FlowNode, sourceFlowNode?: FlowNode, ignoreNoReturn?: boolean) => boolean;
|
94
|
-
narrowConstrainedTypeVar: (flowNode: FlowNode, typeVar: TypeVarType) => Type | undefined;
|
95
|
-
}
|
96
|
-
|
97
|
-
// This debugging option prints the control flow graph when getTypeFromCodeFlow is called.
|
98
|
-
const isPrintControlFlowGraphEnabled = false;
|
99
|
-
|
100
|
-
// This debugging option prints the results of calls to isCallNoReturn.
|
101
|
-
const isPrintCallNoReturnEnabled = false;
|
102
|
-
|
103
|
-
export function getCodeFlowEngine(
|
104
|
-
evaluator: TypeEvaluator,
|
105
|
-
speculativeTypeTracker: SpeculativeTypeTracker
|
106
|
-
): CodeFlowEngine {
|
107
|
-
const isReachableRecursionMap = new Map<number, true>();
|
108
|
-
const callIsNoReturnCache = new Map<number, boolean>();
|
109
|
-
const isExceptionContextManagerCache = new Map<number, boolean>();
|
110
|
-
let flowIncompleteGeneration = 1;
|
111
|
-
let noReturnAnalysisDepth = 0;
|
112
|
-
let contextManagerAnalysisDepth = 0;
|
113
|
-
|
114
|
-
// Creates a new code flow analyzer that can be used to narrow the types
|
115
|
-
// of the expressions within an execution context. Each code flow analyzer
|
116
|
-
// instance maintains a cache of types it has already determined.
|
117
|
-
function createCodeFlowAnalyzer(): CodeFlowAnalyzer {
|
118
|
-
const flowNodeTypeCacheSet = new Map<string, TypeCache>();
|
119
|
-
|
120
|
-
function getFlowNodeTypeCacheForReference(referenceKey: string) {
|
121
|
-
let flowNodeTypeCache = flowNodeTypeCacheSet.get(referenceKey);
|
122
|
-
if (!flowNodeTypeCache) {
|
123
|
-
flowNodeTypeCache = new Map<number, CachedType | undefined>();
|
124
|
-
flowNodeTypeCacheSet.set(referenceKey, flowNodeTypeCache);
|
125
|
-
}
|
126
|
-
|
127
|
-
return flowNodeTypeCache;
|
128
|
-
}
|
129
|
-
|
130
|
-
function getTypeFromCodeFlow(
|
131
|
-
flowNode: FlowNode,
|
132
|
-
reference: CodeFlowReferenceExpressionNode | undefined,
|
133
|
-
targetSymbolId: number | undefined,
|
134
|
-
initialType: Type | undefined,
|
135
|
-
isInitialTypeIncomplete: boolean,
|
136
|
-
ignoreNoReturn: boolean
|
137
|
-
): FlowNodeTypeResult {
|
138
|
-
if (isPrintControlFlowGraphEnabled) {
|
139
|
-
printControlFlowGraph(flowNode, reference, 'getTypeFromCodeFlow');
|
140
|
-
}
|
141
|
-
|
142
|
-
const referenceKey = reference !== undefined ? createKeyForReference(reference) : undefined;
|
143
|
-
let subexpressionReferenceKeys: string[] | undefined;
|
144
|
-
const referenceKeyWithSymbolId =
|
145
|
-
referenceKey !== undefined && targetSymbolId !== undefined
|
146
|
-
? referenceKey + `.${targetSymbolId.toString()}`
|
147
|
-
: '.';
|
148
|
-
const flowNodeTypeCache = getFlowNodeTypeCacheForReference(referenceKeyWithSymbolId);
|
149
|
-
|
150
|
-
// Caches the type of the flow node in our local cache, keyed by the flow node ID.
|
151
|
-
function setCacheEntry(
|
152
|
-
flowNode: FlowNode,
|
153
|
-
type: Type | undefined,
|
154
|
-
isIncomplete: boolean,
|
155
|
-
isRecursionSentinel?: boolean
|
156
|
-
): FlowNodeTypeResult {
|
157
|
-
if (!isIncomplete) {
|
158
|
-
flowIncompleteGeneration++;
|
159
|
-
} else if (type) {
|
160
|
-
const prevEntry = flowNodeTypeCache.get(flowNode.id);
|
161
|
-
if (prevEntry === undefined) {
|
162
|
-
flowIncompleteGeneration++;
|
163
|
-
} else if ((prevEntry as IncompleteType).isIncompleteType) {
|
164
|
-
const prevIncompleteType = prevEntry as IncompleteType;
|
165
|
-
if (prevIncompleteType.type && !isTypeSame(prevIncompleteType.type, type)) {
|
166
|
-
flowIncompleteGeneration++;
|
167
|
-
}
|
168
|
-
}
|
169
|
-
}
|
170
|
-
|
171
|
-
// For speculative or incomplete types, we'll create a separate
|
172
|
-
// object. For non-speculative and complete types, we'll store
|
173
|
-
// the type directly.
|
174
|
-
const entry: CachedType | undefined = isIncomplete
|
175
|
-
? {
|
176
|
-
isIncompleteType: true,
|
177
|
-
type,
|
178
|
-
incompleteSubtypes: [],
|
179
|
-
generationCount: flowIncompleteGeneration,
|
180
|
-
isRecursionSentinel,
|
181
|
-
}
|
182
|
-
: type;
|
183
|
-
|
184
|
-
flowNodeTypeCache.set(flowNode.id, entry);
|
185
|
-
speculativeTypeTracker.trackEntry(flowNodeTypeCache, flowNode.id);
|
186
|
-
|
187
|
-
return {
|
188
|
-
type,
|
189
|
-
isIncomplete,
|
190
|
-
isRecursionSentinel,
|
191
|
-
generationCount: flowIncompleteGeneration,
|
192
|
-
incompleteSubtypes: isIncomplete ? [] : undefined,
|
193
|
-
};
|
194
|
-
}
|
195
|
-
|
196
|
-
function setIncompleteSubtype(
|
197
|
-
flowNode: FlowNode,
|
198
|
-
index: number,
|
199
|
-
type: Type | undefined,
|
200
|
-
isIncomplete: boolean,
|
201
|
-
isPending: boolean,
|
202
|
-
evaluationCount: number
|
203
|
-
) {
|
204
|
-
const cachedEntry = flowNodeTypeCache.get(flowNode.id);
|
205
|
-
if (cachedEntry === undefined || !isIncompleteType(cachedEntry)) {
|
206
|
-
fail('setIncompleteSubtype can be called only on a valid incomplete cache entry');
|
207
|
-
}
|
208
|
-
|
209
|
-
const incompleteEntries = cachedEntry.incompleteSubtypes;
|
210
|
-
if (index < incompleteEntries.length) {
|
211
|
-
const oldEntry = incompleteEntries[index];
|
212
|
-
if (
|
213
|
-
oldEntry.isIncomplete !== isIncomplete ||
|
214
|
-
oldEntry.type === undefined ||
|
215
|
-
type === undefined ||
|
216
|
-
!isTypeSame(oldEntry.type, type)
|
217
|
-
) {
|
218
|
-
incompleteEntries[index] = { type, isIncomplete, isPending, evaluationCount };
|
219
|
-
flowIncompleteGeneration++;
|
220
|
-
} else if (oldEntry.isPending !== isPending) {
|
221
|
-
incompleteEntries[index] = { type, isIncomplete, isPending, evaluationCount };
|
222
|
-
}
|
223
|
-
} else {
|
224
|
-
assert(incompleteEntries.length === index);
|
225
|
-
incompleteEntries.push({ type, isIncomplete, isPending, evaluationCount });
|
226
|
-
flowIncompleteGeneration++;
|
227
|
-
}
|
228
|
-
|
229
|
-
return getCacheEntry(flowNode);
|
230
|
-
}
|
231
|
-
|
232
|
-
function getCacheEntry(flowNode: FlowNode): FlowNodeTypeResult | undefined {
|
233
|
-
if (!flowNodeTypeCache.has(flowNode.id)) {
|
234
|
-
return undefined;
|
235
|
-
}
|
236
|
-
|
237
|
-
const cachedEntry = flowNodeTypeCache.get(flowNode.id);
|
238
|
-
if (cachedEntry === undefined) {
|
239
|
-
return {
|
240
|
-
type: cachedEntry,
|
241
|
-
isIncomplete: false,
|
242
|
-
};
|
243
|
-
}
|
244
|
-
|
245
|
-
if (!isIncompleteType(cachedEntry)) {
|
246
|
-
return {
|
247
|
-
type: cachedEntry,
|
248
|
-
isIncomplete: false,
|
249
|
-
};
|
250
|
-
}
|
251
|
-
|
252
|
-
let type = cachedEntry.type;
|
253
|
-
|
254
|
-
if (cachedEntry.incompleteSubtypes.length > 0) {
|
255
|
-
// Recompute the effective type based on all of the incomplete
|
256
|
-
// types we've accumulated so far.
|
257
|
-
const typesToCombine: Type[] = [];
|
258
|
-
cachedEntry.incompleteSubtypes.forEach((t) => {
|
259
|
-
if (t.type) {
|
260
|
-
typesToCombine.push(t.type);
|
261
|
-
}
|
262
|
-
});
|
263
|
-
type = typesToCombine.length > 0 ? combineTypes(typesToCombine) : undefined;
|
264
|
-
}
|
265
|
-
|
266
|
-
return {
|
267
|
-
type,
|
268
|
-
isIncomplete: true,
|
269
|
-
incompleteSubtypes: cachedEntry.incompleteSubtypes,
|
270
|
-
generationCount: cachedEntry.generationCount,
|
271
|
-
isRecursionSentinel: cachedEntry.isRecursionSentinel,
|
272
|
-
};
|
273
|
-
}
|
274
|
-
|
275
|
-
function deleteCacheEntry(flowNode: FlowNode) {
|
276
|
-
flowNodeTypeCache.delete(flowNode.id);
|
277
|
-
}
|
278
|
-
|
279
|
-
function evaluateAssignmentFlowNode(flowNode: FlowAssignment): TypeResult | undefined {
|
280
|
-
// For function and class nodes, the reference node is the name
|
281
|
-
// node, but we need to use the parent node (the FunctionNode or ClassNode)
|
282
|
-
// to access the decorated type in the type cache.
|
283
|
-
let nodeForCacheLookup: ParseNode = flowNode.node;
|
284
|
-
const parentNode = flowNode.node.parent;
|
285
|
-
if (parentNode) {
|
286
|
-
if (parentNode.nodeType === ParseNodeType.Function || parentNode.nodeType === ParseNodeType.Class) {
|
287
|
-
nodeForCacheLookup = parentNode;
|
288
|
-
}
|
289
|
-
}
|
290
|
-
|
291
|
-
return evaluator.evaluateTypeForSubnode(nodeForCacheLookup, () => {
|
292
|
-
evaluator.evaluateTypesForStatement(flowNode.node);
|
293
|
-
});
|
294
|
-
}
|
295
|
-
|
296
|
-
// If this flow has no knowledge of the target expression, it returns undefined.
|
297
|
-
// If the start flow node for this scope is reachable, the typeAtStart value is
|
298
|
-
// returned.
|
299
|
-
function getTypeFromFlowNode(flowNode: FlowNode): FlowNodeTypeResult {
|
300
|
-
let curFlowNode = flowNode;
|
301
|
-
|
302
|
-
// This is a frequently-called routine, so it's a good place to call
|
303
|
-
// the cancellation check. If the operation is canceled, an exception
|
304
|
-
// will be thrown at this point.
|
305
|
-
evaluator.checkForCancellation();
|
306
|
-
|
307
|
-
while (true) {
|
308
|
-
// Have we already been here? If so, use the cached value.
|
309
|
-
const cachedEntry = getCacheEntry(curFlowNode);
|
310
|
-
if (cachedEntry) {
|
311
|
-
if (!cachedEntry.isIncomplete) {
|
312
|
-
return cachedEntry;
|
313
|
-
}
|
314
|
-
|
315
|
-
// If the cached entry is incomplete, we can use it only if nothing
|
316
|
-
// has changed that may cause the previously-reported incomplete type to change.
|
317
|
-
if (cachedEntry.generationCount === flowIncompleteGeneration) {
|
318
|
-
return { type: cachedEntry.type, isIncomplete: true };
|
319
|
-
}
|
320
|
-
}
|
321
|
-
|
322
|
-
if (curFlowNode.flags & FlowFlags.Unreachable) {
|
323
|
-
// We can get here if there are nodes in a compound logical expression
|
324
|
-
// (e.g. "False and x") that are never executed but are evaluated.
|
325
|
-
return setCacheEntry(curFlowNode, NeverType.createNever(), /* isIncomplete */ false);
|
326
|
-
}
|
327
|
-
|
328
|
-
if (curFlowNode.flags & FlowFlags.VariableAnnotation) {
|
329
|
-
const varAnnotationNode = curFlowNode as FlowVariableAnnotation;
|
330
|
-
curFlowNode = varAnnotationNode.antecedent;
|
331
|
-
continue;
|
332
|
-
}
|
333
|
-
|
334
|
-
if (curFlowNode.flags & FlowFlags.Call) {
|
335
|
-
const callFlowNode = curFlowNode as FlowCall;
|
336
|
-
|
337
|
-
// If this function returns a "NoReturn" type, that means
|
338
|
-
// it always raises an exception or otherwise doesn't return,
|
339
|
-
// so we can assume that the code before this is unreachable.
|
340
|
-
if (!ignoreNoReturn && isCallNoReturn(evaluator, callFlowNode)) {
|
341
|
-
return setCacheEntry(curFlowNode, /* type */ undefined, /* isIncomplete */ false);
|
342
|
-
}
|
343
|
-
|
344
|
-
curFlowNode = callFlowNode.antecedent;
|
345
|
-
continue;
|
346
|
-
}
|
347
|
-
|
348
|
-
if (curFlowNode.flags & FlowFlags.Assignment) {
|
349
|
-
const assignmentFlowNode = curFlowNode as FlowAssignment;
|
350
|
-
|
351
|
-
// Are we targeting the same symbol? We need to do this extra check because the same
|
352
|
-
// symbol name might refer to different symbols in different scopes (e.g. a list
|
353
|
-
// comprehension introduces a new scope).
|
354
|
-
if (reference) {
|
355
|
-
if (
|
356
|
-
targetSymbolId === assignmentFlowNode.targetSymbolId &&
|
357
|
-
isMatchingExpression(reference, assignmentFlowNode.node)
|
358
|
-
) {
|
359
|
-
// Is this a special "unbind" assignment? If so,
|
360
|
-
// we can handle it immediately without any further evaluation.
|
361
|
-
if (curFlowNode.flags & FlowFlags.Unbind) {
|
362
|
-
return setCacheEntry(curFlowNode, UnboundType.create(), /* isIncomplete */ false);
|
363
|
-
}
|
364
|
-
|
365
|
-
// If there was a cache entry already, that means we hit a recursive
|
366
|
-
// case (something like "int: int = 4"). Avoid infinite recursion
|
367
|
-
// by returning an undefined type.
|
368
|
-
if (cachedEntry?.isRecursionSentinel) {
|
369
|
-
return { type: undefined, isIncomplete: true };
|
370
|
-
}
|
371
|
-
|
372
|
-
// Set the cache entry to undefined before evaluating the
|
373
|
-
// expression in case it depends on itself.
|
374
|
-
setCacheEntry(
|
375
|
-
curFlowNode,
|
376
|
-
reference ? undefined : initialType,
|
377
|
-
/* isIncomplete */ true,
|
378
|
-
/* isRecursionSentinel */ true
|
379
|
-
);
|
380
|
-
let flowTypeResult = evaluateAssignmentFlowNode(assignmentFlowNode);
|
381
|
-
if (flowTypeResult) {
|
382
|
-
if (isTypeAliasPlaceholder(flowTypeResult.type)) {
|
383
|
-
flowTypeResult = undefined;
|
384
|
-
} else if (
|
385
|
-
reference.nodeType === ParseNodeType.MemberAccess &&
|
386
|
-
evaluator.isAsymmetricDescriptorAssignment(assignmentFlowNode.node)
|
387
|
-
) {
|
388
|
-
flowTypeResult = undefined;
|
389
|
-
}
|
390
|
-
}
|
391
|
-
return setCacheEntry(curFlowNode, flowTypeResult?.type, !!flowTypeResult?.isIncomplete);
|
392
|
-
} else if (isPartialMatchingExpression(reference, assignmentFlowNode.node)) {
|
393
|
-
// If the node partially matches the reference, we need to "kill" any narrowed
|
394
|
-
// types further above this point. For example, if we see the sequence
|
395
|
-
// a.b = 3
|
396
|
-
// a = Foo()
|
397
|
-
// x = a.b
|
398
|
-
// The type of "a.b" can no longer be assumed to be Literal[3].
|
399
|
-
return {
|
400
|
-
type: initialType,
|
401
|
-
isIncomplete: isInitialTypeIncomplete,
|
402
|
-
};
|
403
|
-
}
|
404
|
-
}
|
405
|
-
|
406
|
-
curFlowNode = assignmentFlowNode.antecedent;
|
407
|
-
continue;
|
408
|
-
}
|
409
|
-
|
410
|
-
if (curFlowNode.flags & FlowFlags.BranchLabel) {
|
411
|
-
const branchFlowNode = curFlowNode as FlowBranchLabel;
|
412
|
-
if (curFlowNode.flags & FlowFlags.PostContextManager) {
|
413
|
-
// Determine whether any of the context managers support exception
|
414
|
-
// suppression. If not, none of its antecedents are reachable.
|
415
|
-
const contextMgrNode = curFlowNode as FlowPostContextManagerLabel;
|
416
|
-
const contextManagerSwallowsExceptions = contextMgrNode.expressions.some((expr) =>
|
417
|
-
isExceptionContextManager(evaluator, expr, contextMgrNode.isAsync)
|
418
|
-
);
|
419
|
-
|
420
|
-
if (contextManagerSwallowsExceptions === contextMgrNode.blockIfSwallowsExceptions) {
|
421
|
-
// Do not explore any further along this code flow path.
|
422
|
-
return setCacheEntry(curFlowNode, /* type */ undefined, /* isIncomplete */ false);
|
423
|
-
}
|
424
|
-
}
|
425
|
-
|
426
|
-
// Is the current symbol modified in any way within the scope of the branch?
|
427
|
-
// If not, we can skip all processing within the branch scope.
|
428
|
-
if (reference && branchFlowNode.preBranchAntecedent && branchFlowNode.affectedExpressions) {
|
429
|
-
if (!subexpressionReferenceKeys) {
|
430
|
-
subexpressionReferenceKeys = createKeysForReferenceSubexpressions(reference);
|
431
|
-
}
|
432
|
-
|
433
|
-
if (
|
434
|
-
!subexpressionReferenceKeys.some((key) =>
|
435
|
-
branchFlowNode.affectedExpressions!.has(key)
|
436
|
-
) &&
|
437
|
-
isFlowNodeReachable(curFlowNode, branchFlowNode.preBranchAntecedent)
|
438
|
-
) {
|
439
|
-
curFlowNode = branchFlowNode.preBranchAntecedent;
|
440
|
-
continue;
|
441
|
-
}
|
442
|
-
}
|
443
|
-
|
444
|
-
return getTypeFromBranchFlowNode(curFlowNode as FlowLabel);
|
445
|
-
}
|
446
|
-
|
447
|
-
if (curFlowNode.flags & FlowFlags.LoopLabel) {
|
448
|
-
const loopNode = curFlowNode as FlowLabel;
|
449
|
-
|
450
|
-
// Is the current symbol modified in any way within the loop? If not, we can skip all
|
451
|
-
// processing within the loop and assume that the type comes from the first antecedent,
|
452
|
-
// which feeds the loop.
|
453
|
-
if (reference) {
|
454
|
-
if (!subexpressionReferenceKeys) {
|
455
|
-
subexpressionReferenceKeys = createKeysForReferenceSubexpressions(reference);
|
456
|
-
}
|
457
|
-
|
458
|
-
if (!subexpressionReferenceKeys.some((key) => loopNode.affectedExpressions!.has(key))) {
|
459
|
-
curFlowNode = loopNode.antecedents[0];
|
460
|
-
continue;
|
461
|
-
}
|
462
|
-
}
|
463
|
-
|
464
|
-
return getTypeFromLoopFlowNode(loopNode);
|
465
|
-
}
|
466
|
-
|
467
|
-
if (curFlowNode.flags & (FlowFlags.TrueCondition | FlowFlags.FalseCondition)) {
|
468
|
-
const conditionalFlowNode = curFlowNode as FlowCondition;
|
469
|
-
|
470
|
-
if (reference) {
|
471
|
-
// Was an incomplete entry added to prevent recursion?
|
472
|
-
if (cachedEntry?.isRecursionSentinel) {
|
473
|
-
return cachedEntry;
|
474
|
-
}
|
475
|
-
|
476
|
-
// Before calling getTypeNarrowingCallback, set the type
|
477
|
-
// of this flow node in the cache to prevent recursion.
|
478
|
-
setCacheEntry(
|
479
|
-
curFlowNode,
|
480
|
-
/* type */ undefined,
|
481
|
-
/* isIncomplete */ true,
|
482
|
-
/* isRecursionSentinel */ true
|
483
|
-
);
|
484
|
-
|
485
|
-
try {
|
486
|
-
const typeNarrowingCallback = getTypeNarrowingCallback(
|
487
|
-
evaluator,
|
488
|
-
reference,
|
489
|
-
conditionalFlowNode.expression,
|
490
|
-
!!(
|
491
|
-
conditionalFlowNode.flags &
|
492
|
-
(FlowFlags.TrueCondition | FlowFlags.TrueNeverCondition)
|
493
|
-
)
|
494
|
-
);
|
495
|
-
|
496
|
-
if (typeNarrowingCallback) {
|
497
|
-
const flowTypeResult = getTypeFromFlowNode(conditionalFlowNode.antecedent);
|
498
|
-
let flowType = flowTypeResult.type;
|
499
|
-
if (flowType) {
|
500
|
-
flowType = typeNarrowingCallback(flowType);
|
501
|
-
}
|
502
|
-
|
503
|
-
return setCacheEntry(curFlowNode, flowType, flowTypeResult.isIncomplete);
|
504
|
-
}
|
505
|
-
|
506
|
-
deleteCacheEntry(curFlowNode);
|
507
|
-
} catch (e) {
|
508
|
-
// We don't use finally here because the debugger
|
509
|
-
// doesn't handle it well during single stepping.
|
510
|
-
deleteCacheEntry(curFlowNode);
|
511
|
-
throw e;
|
512
|
-
}
|
513
|
-
}
|
514
|
-
|
515
|
-
curFlowNode = conditionalFlowNode.antecedent;
|
516
|
-
continue;
|
517
|
-
}
|
518
|
-
|
519
|
-
if (curFlowNode.flags & (FlowFlags.TrueNeverCondition | FlowFlags.FalseNeverCondition)) {
|
520
|
-
const conditionalFlowNode = curFlowNode as FlowCondition;
|
521
|
-
if (conditionalFlowNode.reference) {
|
522
|
-
// Don't allow apply if the conditional expression references the expression
|
523
|
-
// we're already narrowing. This case will be handled by the TrueCondition
|
524
|
-
// or FalseCondition node.
|
525
|
-
if (createKeyForReference(conditionalFlowNode.reference) !== referenceKey) {
|
526
|
-
// Make sure the reference type has a declared type. If not,
|
527
|
-
// don't bother trying to infer its type because that would be
|
528
|
-
// too expensive.
|
529
|
-
const symbolWithScope = evaluator.lookUpSymbolRecursive(
|
530
|
-
conditionalFlowNode.reference,
|
531
|
-
conditionalFlowNode.reference.value,
|
532
|
-
/* honorCodeFlow */ false
|
533
|
-
);
|
534
|
-
if (symbolWithScope && symbolWithScope.symbol.getTypedDeclarations().length > 0) {
|
535
|
-
// Before calling getTypeNarrowingCallback, set the type
|
536
|
-
// of this flow node in the cache to prevent recursion.
|
537
|
-
setCacheEntry(
|
538
|
-
curFlowNode,
|
539
|
-
reference ? undefined : initialType,
|
540
|
-
/* isIncomplete */ true,
|
541
|
-
/* isRecursionSentinel */ true
|
542
|
-
);
|
543
|
-
|
544
|
-
try {
|
545
|
-
const typeNarrowingCallback = getTypeNarrowingCallback(
|
546
|
-
evaluator,
|
547
|
-
conditionalFlowNode.reference,
|
548
|
-
conditionalFlowNode.expression,
|
549
|
-
!!(
|
550
|
-
conditionalFlowNode.flags &
|
551
|
-
(FlowFlags.TrueCondition | FlowFlags.TrueNeverCondition)
|
552
|
-
)
|
553
|
-
);
|
554
|
-
|
555
|
-
if (typeNarrowingCallback) {
|
556
|
-
const refTypeInfo = evaluator.getTypeOfExpression(
|
557
|
-
conditionalFlowNode.reference!
|
558
|
-
);
|
559
|
-
const narrowedType =
|
560
|
-
typeNarrowingCallback(refTypeInfo.type) || refTypeInfo.type;
|
561
|
-
|
562
|
-
// If the narrowed type is "never", don't allow further exploration.
|
563
|
-
if (isNever(narrowedType)) {
|
564
|
-
return setCacheEntry(
|
565
|
-
curFlowNode,
|
566
|
-
undefined,
|
567
|
-
!!refTypeInfo.isIncomplete
|
568
|
-
);
|
569
|
-
}
|
570
|
-
}
|
571
|
-
|
572
|
-
deleteCacheEntry(curFlowNode);
|
573
|
-
} catch (e) {
|
574
|
-
// We don't use finally here because the debugger
|
575
|
-
// doesn't handle it well during single stepping.
|
576
|
-
deleteCacheEntry(curFlowNode);
|
577
|
-
throw e;
|
578
|
-
}
|
579
|
-
}
|
580
|
-
}
|
581
|
-
}
|
582
|
-
curFlowNode = conditionalFlowNode.antecedent;
|
583
|
-
continue;
|
584
|
-
}
|
585
|
-
|
586
|
-
if (curFlowNode.flags & FlowFlags.ExhaustedMatch) {
|
587
|
-
const exhaustedMatchFlowNode = curFlowNode as FlowExhaustedMatch;
|
588
|
-
const narrowedTypeResult = evaluator.evaluateTypeForSubnode(exhaustedMatchFlowNode.node, () => {
|
589
|
-
evaluator.evaluateTypesForMatchStatement(exhaustedMatchFlowNode.node);
|
590
|
-
});
|
591
|
-
|
592
|
-
// If the narrowed type is "never", don't allow further exploration.
|
593
|
-
if (narrowedTypeResult && isNever(narrowedTypeResult.type)) {
|
594
|
-
return setCacheEntry(curFlowNode, /* type */ undefined, !!narrowedTypeResult.isIncomplete);
|
595
|
-
}
|
596
|
-
|
597
|
-
curFlowNode = exhaustedMatchFlowNode.antecedent;
|
598
|
-
continue;
|
599
|
-
}
|
600
|
-
|
601
|
-
if (curFlowNode.flags & FlowFlags.NarrowForPattern) {
|
602
|
-
const patternFlowNode = curFlowNode as FlowNarrowForPattern;
|
603
|
-
if (!reference || isMatchingExpression(reference, patternFlowNode.subjectExpression)) {
|
604
|
-
const typeResult = evaluator.evaluateTypeForSubnode(patternFlowNode.statement, () => {
|
605
|
-
if (patternFlowNode.statement.nodeType === ParseNodeType.Case) {
|
606
|
-
evaluator.evaluateTypesForCaseStatement(patternFlowNode.statement);
|
607
|
-
} else {
|
608
|
-
evaluator.evaluateTypesForMatchStatement(patternFlowNode.statement);
|
609
|
-
}
|
610
|
-
});
|
611
|
-
|
612
|
-
if (typeResult) {
|
613
|
-
if (!reference) {
|
614
|
-
if (isNever(typeResult.type)) {
|
615
|
-
return setCacheEntry(
|
616
|
-
curFlowNode,
|
617
|
-
/* type */ undefined,
|
618
|
-
!!typeResult.isIncomplete
|
619
|
-
);
|
620
|
-
}
|
621
|
-
} else {
|
622
|
-
return setCacheEntry(curFlowNode, typeResult.type, !!typeResult.isIncomplete);
|
623
|
-
}
|
624
|
-
}
|
625
|
-
}
|
626
|
-
curFlowNode = patternFlowNode.antecedent;
|
627
|
-
continue;
|
628
|
-
}
|
629
|
-
|
630
|
-
if (curFlowNode.flags & FlowFlags.PreFinallyGate) {
|
631
|
-
return getTypeFromPreFinallyGateFlowNode(curFlowNode as FlowPreFinallyGate);
|
632
|
-
}
|
633
|
-
|
634
|
-
if (curFlowNode.flags & FlowFlags.PostFinally) {
|
635
|
-
return getTypeFromPostFinallyFlowNode(curFlowNode as FlowPostFinally);
|
636
|
-
}
|
637
|
-
|
638
|
-
if (curFlowNode.flags & FlowFlags.Start) {
|
639
|
-
return setCacheEntry(curFlowNode, initialType, isInitialTypeIncomplete);
|
640
|
-
}
|
641
|
-
|
642
|
-
if (curFlowNode.flags & FlowFlags.WildcardImport) {
|
643
|
-
const wildcardImportFlowNode = curFlowNode as FlowWildcardImport;
|
644
|
-
if (reference && reference.nodeType === ParseNodeType.Name) {
|
645
|
-
const nameValue = reference.value;
|
646
|
-
if (wildcardImportFlowNode.names.some((name) => name === nameValue)) {
|
647
|
-
// Before calling getTypeFromWildcardImport, set the cache entry to prevent infinite recursion.
|
648
|
-
setCacheEntry(
|
649
|
-
curFlowNode,
|
650
|
-
/* type */ undefined,
|
651
|
-
/* isIncomplete */ true,
|
652
|
-
/* isRecursionSentinel */ true
|
653
|
-
);
|
654
|
-
|
655
|
-
try {
|
656
|
-
const type = getTypeFromWildcardImport(wildcardImportFlowNode, nameValue);
|
657
|
-
return setCacheEntry(curFlowNode, type, /* isIncomplete */ false);
|
658
|
-
} catch (e) {
|
659
|
-
deleteCacheEntry(curFlowNode);
|
660
|
-
throw e;
|
661
|
-
}
|
662
|
-
}
|
663
|
-
}
|
664
|
-
|
665
|
-
curFlowNode = wildcardImportFlowNode.antecedent;
|
666
|
-
continue;
|
667
|
-
}
|
668
|
-
|
669
|
-
// We shouldn't get here.
|
670
|
-
fail('Unexpected flow node flags');
|
671
|
-
return setCacheEntry(curFlowNode, /* type */ undefined, /* isIncomplete */ false);
|
672
|
-
}
|
673
|
-
}
|
674
|
-
|
675
|
-
function getTypeFromBranchFlowNode(branchNode: FlowLabel) {
|
676
|
-
const typesToCombine: Type[] = [];
|
677
|
-
|
678
|
-
let sawIncomplete = false;
|
679
|
-
let isProvenReachable = false;
|
680
|
-
|
681
|
-
// Set the cache entry to undefined before evaluating the
|
682
|
-
// expression in case it depends on itself.
|
683
|
-
setCacheEntry(
|
684
|
-
branchNode,
|
685
|
-
reference ? undefined : initialType,
|
686
|
-
/* isIncomplete */ true,
|
687
|
-
/* isRecursionSentinel */ true
|
688
|
-
);
|
689
|
-
|
690
|
-
branchNode.antecedents.forEach((antecedent) => {
|
691
|
-
// If we're solving for "reachability", and we have now proven
|
692
|
-
// reachability, there's no reason to do more work.
|
693
|
-
if (reference === undefined && isProvenReachable) {
|
694
|
-
return;
|
695
|
-
}
|
696
|
-
|
697
|
-
const flowTypeResult = getTypeFromFlowNode(antecedent);
|
698
|
-
|
699
|
-
if (flowTypeResult.isIncomplete) {
|
700
|
-
sawIncomplete = true;
|
701
|
-
}
|
702
|
-
|
703
|
-
if (reference === undefined && flowTypeResult.type !== undefined) {
|
704
|
-
isProvenReachable = true;
|
705
|
-
}
|
706
|
-
|
707
|
-
if (flowTypeResult.type) {
|
708
|
-
typesToCombine.push(flowTypeResult.type);
|
709
|
-
}
|
710
|
-
});
|
711
|
-
|
712
|
-
if (isProvenReachable) {
|
713
|
-
return setCacheEntry(branchNode, initialType, /* isIncomplete */ false);
|
714
|
-
}
|
715
|
-
|
716
|
-
const effectiveType = typesToCombine.length > 0 ? combineTypes(typesToCombine) : undefined;
|
717
|
-
|
718
|
-
return setCacheEntry(branchNode, effectiveType, sawIncomplete);
|
719
|
-
}
|
720
|
-
|
721
|
-
function getTypeFromLoopFlowNode(loopNode: FlowLabel) {
|
722
|
-
// See if we've been here before. If so, there will be an incomplete cache entry.
|
723
|
-
let cacheEntry = getCacheEntry(loopNode);
|
724
|
-
|
725
|
-
// The type result from one antecedent may depend on the type
|
726
|
-
// result from another, so loop up to one time for each
|
727
|
-
// antecedent in the loop.
|
728
|
-
const maxAttemptCount = loopNode.antecedents.length;
|
729
|
-
|
730
|
-
if (cacheEntry === undefined) {
|
731
|
-
// We haven't been here before, so create a new incomplete cache entry.
|
732
|
-
cacheEntry = setCacheEntry(
|
733
|
-
loopNode,
|
734
|
-
reference ? undefined : initialType,
|
735
|
-
/* isIncomplete */ true,
|
736
|
-
/* isRecursionSentinel */ true
|
737
|
-
);
|
738
|
-
} else if (cacheEntry.incompleteSubtypes?.some((subtype) => subtype.isPending)) {
|
739
|
-
// If there are pending entries that have not been evaluated even once,
|
740
|
-
// treat it as incomplete.
|
741
|
-
const isIncomplete =
|
742
|
-
cacheEntry.incompleteSubtypes.length < loopNode.antecedents.length ||
|
743
|
-
cacheEntry.incompleteSubtypes.some(
|
744
|
-
(subtype) => subtype.isPending && subtype.evaluationCount < maxAttemptCount
|
745
|
-
);
|
746
|
-
return { type: cacheEntry.type, isIncomplete };
|
747
|
-
}
|
748
|
-
|
749
|
-
let attemptCount = 0;
|
750
|
-
|
751
|
-
while (true) {
|
752
|
-
let sawIncomplete = false;
|
753
|
-
let isProvenReachable =
|
754
|
-
reference === undefined &&
|
755
|
-
cacheEntry.incompleteSubtypes?.some((subtype) => subtype.type !== undefined);
|
756
|
-
|
757
|
-
loopNode.antecedents.forEach((antecedent, index) => {
|
758
|
-
// If we've trying to determine reachability and we've already proven
|
759
|
-
// reachability, then we're done.
|
760
|
-
if (reference === undefined && isProvenReachable) {
|
761
|
-
return;
|
762
|
-
}
|
763
|
-
|
764
|
-
cacheEntry = getCacheEntry(loopNode)!;
|
765
|
-
|
766
|
-
// Have we already been here (i.e. does the entry exist and is
|
767
|
-
// not marked "pending")? If so, we can use the type that was already
|
768
|
-
// computed if it is complete.
|
769
|
-
const subtypeEntry =
|
770
|
-
cacheEntry.incompleteSubtypes !== undefined && index < cacheEntry.incompleteSubtypes.length
|
771
|
-
? cacheEntry.incompleteSubtypes[index]
|
772
|
-
: undefined;
|
773
|
-
if (subtypeEntry === undefined || (!subtypeEntry?.isPending && subtypeEntry?.isIncomplete)) {
|
774
|
-
const entryEvaluationCount = subtypeEntry === undefined ? 0 : subtypeEntry.evaluationCount;
|
775
|
-
// Set this entry to "pending" to prevent infinite recursion.
|
776
|
-
// We'll mark it "not pending" below.
|
777
|
-
cacheEntry = setIncompleteSubtype(
|
778
|
-
loopNode,
|
779
|
-
index,
|
780
|
-
subtypeEntry?.type ?? (reference ? undefined : initialType),
|
781
|
-
/* isIncomplete */ true,
|
782
|
-
/* isPending */ true,
|
783
|
-
entryEvaluationCount
|
784
|
-
);
|
785
|
-
|
786
|
-
try {
|
787
|
-
const flowTypeResult = getTypeFromFlowNode(antecedent);
|
788
|
-
|
789
|
-
if (flowTypeResult.isIncomplete) {
|
790
|
-
sawIncomplete = true;
|
791
|
-
}
|
792
|
-
|
793
|
-
cacheEntry = setIncompleteSubtype(
|
794
|
-
loopNode,
|
795
|
-
index,
|
796
|
-
flowTypeResult.type,
|
797
|
-
flowTypeResult.isIncomplete,
|
798
|
-
/* isPending */ false,
|
799
|
-
entryEvaluationCount + 1
|
800
|
-
);
|
801
|
-
} catch (e) {
|
802
|
-
setIncompleteSubtype(
|
803
|
-
loopNode,
|
804
|
-
index,
|
805
|
-
undefined,
|
806
|
-
/* isIncomplete */ true,
|
807
|
-
/* isPending */ false,
|
808
|
-
entryEvaluationCount + 1
|
809
|
-
);
|
810
|
-
throw e;
|
811
|
-
}
|
812
|
-
}
|
813
|
-
|
814
|
-
if (reference === undefined && cacheEntry?.type !== undefined) {
|
815
|
-
isProvenReachable = true;
|
816
|
-
}
|
817
|
-
});
|
818
|
-
|
819
|
-
if (isProvenReachable) {
|
820
|
-
return setCacheEntry(loopNode, initialType, /* isIncomplete */ false);
|
821
|
-
}
|
822
|
-
|
823
|
-
let effectiveType = cacheEntry.type;
|
824
|
-
if (sawIncomplete) {
|
825
|
-
// If there is an incomplete "Unknown" type within a union type, remove
|
826
|
-
// it. Otherwise we might end up resolving the cycle with a type
|
827
|
-
// that includes an undesirable unknown.
|
828
|
-
if (effectiveType) {
|
829
|
-
const typeWithoutUnknown = removeIncompleteUnknownFromUnion(effectiveType);
|
830
|
-
if (!isNever(typeWithoutUnknown)) {
|
831
|
-
effectiveType = typeWithoutUnknown;
|
832
|
-
}
|
833
|
-
}
|
834
|
-
}
|
835
|
-
|
836
|
-
if (!sawIncomplete || attemptCount >= maxAttemptCount) {
|
837
|
-
return setCacheEntry(loopNode, effectiveType, /* isIncomplete */ false);
|
838
|
-
}
|
839
|
-
|
840
|
-
attemptCount++;
|
841
|
-
}
|
842
|
-
}
|
843
|
-
|
844
|
-
function getTypeFromPreFinallyGateFlowNode(preFinallyFlowNode: FlowPreFinallyGate) {
|
845
|
-
if (preFinallyFlowNode.isGateClosed) {
|
846
|
-
return { type: undefined, isIncomplete: false };
|
847
|
-
}
|
848
|
-
|
849
|
-
// Before recursively calling, set the cache entry to prevent infinite recursion.
|
850
|
-
setCacheEntry(
|
851
|
-
preFinallyFlowNode,
|
852
|
-
reference ? undefined : initialType,
|
853
|
-
/* isIncomplete */ true,
|
854
|
-
/* isRecursionSentinel */ true
|
855
|
-
);
|
856
|
-
|
857
|
-
try {
|
858
|
-
const flowTypeResult = getTypeFromFlowNode(preFinallyFlowNode.antecedent);
|
859
|
-
|
860
|
-
// We want to cache the type only if we're evaluating the "gate closed" path.
|
861
|
-
deleteCacheEntry(preFinallyFlowNode);
|
862
|
-
|
863
|
-
return {
|
864
|
-
type: flowTypeResult.type,
|
865
|
-
isIncomplete: flowTypeResult.isIncomplete,
|
866
|
-
};
|
867
|
-
} catch (e) {
|
868
|
-
deleteCacheEntry(preFinallyFlowNode);
|
869
|
-
throw e;
|
870
|
-
}
|
871
|
-
}
|
872
|
-
|
873
|
-
function getTypeFromPostFinallyFlowNode(postFinallyFlowNode: FlowPostFinally) {
|
874
|
-
const wasGateClosed = postFinallyFlowNode.preFinallyGate.isGateClosed;
|
875
|
-
try {
|
876
|
-
postFinallyFlowNode.preFinallyGate.isGateClosed = true;
|
877
|
-
let flowTypeResult: FlowNodeTypeResult | undefined;
|
878
|
-
|
879
|
-
// Use speculative mode for the remainder of the finally suite
|
880
|
-
// because the final types within this parse node block should be
|
881
|
-
// evaluated when the gate is open.
|
882
|
-
evaluator.useSpeculativeMode(postFinallyFlowNode.finallyNode, () => {
|
883
|
-
flowTypeResult = getTypeFromFlowNode(postFinallyFlowNode.antecedent);
|
884
|
-
});
|
885
|
-
|
886
|
-
// If the type is incomplete, don't write back to the cache.
|
887
|
-
return flowTypeResult!.isIncomplete
|
888
|
-
? flowTypeResult!
|
889
|
-
: setCacheEntry(postFinallyFlowNode, flowTypeResult!.type, /* isIncomplete */ false);
|
890
|
-
} finally {
|
891
|
-
postFinallyFlowNode.preFinallyGate.isGateClosed = wasGateClosed;
|
892
|
-
}
|
893
|
-
}
|
894
|
-
|
895
|
-
if (!flowNode) {
|
896
|
-
// This should happen only in cases where we're evaluating
|
897
|
-
// parse nodes that are created after the initial parse
|
898
|
-
// (namely, string literals that are used for forward
|
899
|
-
// referenced types).
|
900
|
-
return {
|
901
|
-
type: initialType,
|
902
|
-
isIncomplete: isInitialTypeIncomplete,
|
903
|
-
};
|
904
|
-
}
|
905
|
-
|
906
|
-
return getTypeFromFlowNode(flowNode);
|
907
|
-
}
|
908
|
-
|
909
|
-
return {
|
910
|
-
getTypeFromCodeFlow,
|
911
|
-
};
|
912
|
-
}
|
913
|
-
|
914
|
-
// Determines whether the specified flowNode can be reached by any
|
915
|
-
// control flow path within the execution context. If sourceFlowNode
|
916
|
-
// is specified, it returns true only if at least one control flow
|
917
|
-
// path passes through sourceFlowNode.
|
918
|
-
function isFlowNodeReachable(flowNode: FlowNode, sourceFlowNode?: FlowNode, ignoreNoReturn = false): boolean {
|
919
|
-
const visitedFlowNodeMap = new Set<number>();
|
920
|
-
|
921
|
-
if (isPrintControlFlowGraphEnabled) {
|
922
|
-
printControlFlowGraph(flowNode, /* reference */ undefined, 'isFlowNodeReachable');
|
923
|
-
}
|
924
|
-
|
925
|
-
function isFlowNodeReachableRecursive(
|
926
|
-
flowNode: FlowNode,
|
927
|
-
sourceFlowNode: FlowNode | undefined,
|
928
|
-
recursionCount = 0
|
929
|
-
): boolean {
|
930
|
-
// Cut off the recursion at some point to prevent a stack overflow.
|
931
|
-
const maxFlowNodeReachableRecursionCount = 64;
|
932
|
-
if (recursionCount > maxFlowNodeReachableRecursionCount) {
|
933
|
-
return true;
|
934
|
-
}
|
935
|
-
recursionCount++;
|
936
|
-
|
937
|
-
let curFlowNode = flowNode;
|
938
|
-
|
939
|
-
while (true) {
|
940
|
-
// If we've already visited this node, we can assume
|
941
|
-
// it wasn't reachable.
|
942
|
-
if (visitedFlowNodeMap.has(curFlowNode.id)) {
|
943
|
-
return false;
|
944
|
-
}
|
945
|
-
|
946
|
-
// Note that we've been here before.
|
947
|
-
visitedFlowNodeMap.add(curFlowNode.id);
|
948
|
-
|
949
|
-
if (curFlowNode.flags & FlowFlags.Unreachable) {
|
950
|
-
return false;
|
951
|
-
}
|
952
|
-
|
953
|
-
if (curFlowNode === sourceFlowNode) {
|
954
|
-
return true;
|
955
|
-
}
|
956
|
-
|
957
|
-
if (
|
958
|
-
curFlowNode.flags &
|
959
|
-
(FlowFlags.VariableAnnotation |
|
960
|
-
FlowFlags.Assignment |
|
961
|
-
FlowFlags.TrueCondition |
|
962
|
-
FlowFlags.FalseCondition |
|
963
|
-
FlowFlags.WildcardImport |
|
964
|
-
FlowFlags.TrueNeverCondition |
|
965
|
-
FlowFlags.FalseNeverCondition |
|
966
|
-
FlowFlags.NarrowForPattern |
|
967
|
-
FlowFlags.ExhaustedMatch)
|
968
|
-
) {
|
969
|
-
const typedFlowNode = curFlowNode as
|
970
|
-
| FlowVariableAnnotation
|
971
|
-
| FlowAssignment
|
972
|
-
| FlowCondition
|
973
|
-
| FlowWildcardImport
|
974
|
-
| FlowCondition
|
975
|
-
| FlowExhaustedMatch;
|
976
|
-
curFlowNode = typedFlowNode.antecedent;
|
977
|
-
continue;
|
978
|
-
}
|
979
|
-
|
980
|
-
if (curFlowNode.flags & FlowFlags.Call) {
|
981
|
-
const callFlowNode = curFlowNode as FlowCall;
|
982
|
-
|
983
|
-
// If this function returns a "NoReturn" type, that means
|
984
|
-
// it always raises an exception or otherwise doesn't return,
|
985
|
-
// so we can assume that the code before this is unreachable.
|
986
|
-
if (!ignoreNoReturn && isCallNoReturn(evaluator, callFlowNode)) {
|
987
|
-
return false;
|
988
|
-
}
|
989
|
-
|
990
|
-
curFlowNode = callFlowNode.antecedent;
|
991
|
-
continue;
|
992
|
-
}
|
993
|
-
|
994
|
-
if (curFlowNode.flags & (FlowFlags.BranchLabel | FlowFlags.LoopLabel)) {
|
995
|
-
if (curFlowNode.flags & FlowFlags.PostContextManager) {
|
996
|
-
// Determine whether any of the context managers support exception
|
997
|
-
// suppression. If not, none of its antecedents are reachable.
|
998
|
-
const contextMgrNode = curFlowNode as FlowPostContextManagerLabel;
|
999
|
-
if (
|
1000
|
-
!contextMgrNode.expressions.some((expr) =>
|
1001
|
-
isExceptionContextManager(evaluator, expr, contextMgrNode.isAsync)
|
1002
|
-
)
|
1003
|
-
) {
|
1004
|
-
return false;
|
1005
|
-
}
|
1006
|
-
}
|
1007
|
-
|
1008
|
-
const labelNode = curFlowNode as FlowLabel;
|
1009
|
-
for (const antecedent of labelNode.antecedents) {
|
1010
|
-
if (isFlowNodeReachableRecursive(antecedent, sourceFlowNode, recursionCount)) {
|
1011
|
-
return true;
|
1012
|
-
}
|
1013
|
-
}
|
1014
|
-
return false;
|
1015
|
-
}
|
1016
|
-
|
1017
|
-
if (curFlowNode.flags & FlowFlags.Start) {
|
1018
|
-
// If we hit the start but were looking for a particular source flow
|
1019
|
-
// node, return false. Otherwise, the start is what we're looking for.
|
1020
|
-
return sourceFlowNode ? false : true;
|
1021
|
-
}
|
1022
|
-
|
1023
|
-
if (curFlowNode.flags & FlowFlags.PreFinallyGate) {
|
1024
|
-
const preFinallyFlowNode = curFlowNode as FlowPreFinallyGate;
|
1025
|
-
if (preFinallyFlowNode.isGateClosed) {
|
1026
|
-
return false;
|
1027
|
-
}
|
1028
|
-
|
1029
|
-
curFlowNode = preFinallyFlowNode.antecedent;
|
1030
|
-
continue;
|
1031
|
-
}
|
1032
|
-
|
1033
|
-
if (curFlowNode.flags & FlowFlags.PostFinally) {
|
1034
|
-
const postFinallyFlowNode = curFlowNode as FlowPostFinally;
|
1035
|
-
const wasGateClosed = postFinallyFlowNode.preFinallyGate.isGateClosed;
|
1036
|
-
|
1037
|
-
try {
|
1038
|
-
postFinallyFlowNode.preFinallyGate.isGateClosed = true;
|
1039
|
-
return isFlowNodeReachableRecursive(
|
1040
|
-
postFinallyFlowNode.antecedent,
|
1041
|
-
sourceFlowNode,
|
1042
|
-
recursionCount
|
1043
|
-
);
|
1044
|
-
} finally {
|
1045
|
-
postFinallyFlowNode.preFinallyGate.isGateClosed = wasGateClosed;
|
1046
|
-
}
|
1047
|
-
}
|
1048
|
-
|
1049
|
-
// We shouldn't get here.
|
1050
|
-
fail('Unexpected flow node flags');
|
1051
|
-
return false;
|
1052
|
-
}
|
1053
|
-
}
|
1054
|
-
|
1055
|
-
// Protect against infinite recursion.
|
1056
|
-
if (isReachableRecursionMap.has(flowNode.id)) {
|
1057
|
-
return true;
|
1058
|
-
}
|
1059
|
-
isReachableRecursionMap.set(flowNode.id, true);
|
1060
|
-
|
1061
|
-
try {
|
1062
|
-
return isFlowNodeReachableRecursive(flowNode, sourceFlowNode);
|
1063
|
-
} finally {
|
1064
|
-
isReachableRecursionMap.delete(flowNode.id);
|
1065
|
-
}
|
1066
|
-
}
|
1067
|
-
|
1068
|
-
// Determines whether the specified typeVar, which is assumed to be constrained,
|
1069
|
-
// can be narrowed to one of its constrained types based on isinstance type
|
1070
|
-
// guard checks.
|
1071
|
-
function narrowConstrainedTypeVar(flowNode: FlowNode, typeVar: TypeVarType): ClassType | undefined {
|
1072
|
-
assert(!typeVar.details.isParamSpec);
|
1073
|
-
assert(!typeVar.details.isVariadic);
|
1074
|
-
assert(!typeVar.details.boundType);
|
1075
|
-
assert(typeVar.details.constraints.length > 0);
|
1076
|
-
|
1077
|
-
const visitedFlowNodeMap = new Set<number>();
|
1078
|
-
const startingConstraints: ClassType[] = [];
|
1079
|
-
|
1080
|
-
for (const constraint of typeVar.details.constraints) {
|
1081
|
-
if (isClassInstance(constraint)) {
|
1082
|
-
startingConstraints.push(constraint);
|
1083
|
-
} else {
|
1084
|
-
// If one or more constraints are Unknown, Any, union types, etc.,
|
1085
|
-
// we can't narrow them.
|
1086
|
-
return undefined;
|
1087
|
-
}
|
1088
|
-
}
|
1089
|
-
|
1090
|
-
function narrowConstrainedTypeVarRecursive(flowNode: FlowNode, typeVar: TypeVarType): ClassType[] {
|
1091
|
-
let curFlowNode = flowNode;
|
1092
|
-
|
1093
|
-
while (true) {
|
1094
|
-
if (visitedFlowNodeMap.has(curFlowNode.id)) {
|
1095
|
-
return startingConstraints;
|
1096
|
-
}
|
1097
|
-
|
1098
|
-
if (curFlowNode.flags & (FlowFlags.Unreachable | FlowFlags.Start)) {
|
1099
|
-
return startingConstraints;
|
1100
|
-
}
|
1101
|
-
|
1102
|
-
if (
|
1103
|
-
curFlowNode.flags &
|
1104
|
-
(FlowFlags.VariableAnnotation |
|
1105
|
-
FlowFlags.Assignment |
|
1106
|
-
FlowFlags.WildcardImport |
|
1107
|
-
FlowFlags.TrueNeverCondition |
|
1108
|
-
FlowFlags.FalseNeverCondition |
|
1109
|
-
FlowFlags.NarrowForPattern |
|
1110
|
-
FlowFlags.ExhaustedMatch |
|
1111
|
-
FlowFlags.PostFinally |
|
1112
|
-
FlowFlags.PreFinallyGate |
|
1113
|
-
FlowFlags.Call)
|
1114
|
-
) {
|
1115
|
-
const typedFlowNode = curFlowNode as
|
1116
|
-
| FlowVariableAnnotation
|
1117
|
-
| FlowAssignment
|
1118
|
-
| FlowWildcardImport
|
1119
|
-
| FlowExhaustedMatch
|
1120
|
-
| FlowNarrowForPattern
|
1121
|
-
| FlowPostFinally
|
1122
|
-
| FlowPreFinallyGate
|
1123
|
-
| FlowCall;
|
1124
|
-
curFlowNode = typedFlowNode.antecedent;
|
1125
|
-
continue;
|
1126
|
-
}
|
1127
|
-
|
1128
|
-
if (curFlowNode.flags & (FlowFlags.TrueCondition | FlowFlags.FalseCondition)) {
|
1129
|
-
const conditionFlowNode = curFlowNode as FlowCondition;
|
1130
|
-
const testExpression = conditionFlowNode.expression;
|
1131
|
-
const isPositiveTest = (curFlowNode.flags & FlowFlags.TrueCondition) !== 0;
|
1132
|
-
|
1133
|
-
if (
|
1134
|
-
testExpression.nodeType === ParseNodeType.Call &&
|
1135
|
-
testExpression.leftExpression.nodeType === ParseNodeType.Name &&
|
1136
|
-
testExpression.leftExpression.value === 'isinstance' &&
|
1137
|
-
testExpression.arguments.length === 2
|
1138
|
-
) {
|
1139
|
-
const arg0Expr = testExpression.arguments[0].valueExpression;
|
1140
|
-
|
1141
|
-
const arg0Type = evaluator.getTypeOfExpression(arg0Expr).type;
|
1142
|
-
|
1143
|
-
if (isCompatibleWithConstrainedTypeVar(arg0Type, typeVar)) {
|
1144
|
-
// Prevent infinite recursion by noting that we've been here before.
|
1145
|
-
visitedFlowNodeMap.add(curFlowNode.id);
|
1146
|
-
const priorRemainingConstraints = narrowConstrainedTypeVarRecursive(
|
1147
|
-
conditionFlowNode.antecedent,
|
1148
|
-
typeVar
|
1149
|
-
);
|
1150
|
-
visitedFlowNodeMap.delete(curFlowNode.id);
|
1151
|
-
|
1152
|
-
const arg1Expr = testExpression.arguments[1].valueExpression;
|
1153
|
-
const arg1Type = evaluator.getTypeOfExpression(
|
1154
|
-
arg1Expr,
|
1155
|
-
EvaluatorFlags.EvaluateStringLiteralAsType |
|
1156
|
-
EvaluatorFlags.ParamSpecDisallowed |
|
1157
|
-
EvaluatorFlags.TypeVarTupleDisallowed
|
1158
|
-
).type;
|
1159
|
-
|
1160
|
-
if (isInstantiableClass(arg1Type)) {
|
1161
|
-
return priorRemainingConstraints.filter((subtype) => {
|
1162
|
-
if (ClassType.isSameGenericClass(subtype, arg1Type)) {
|
1163
|
-
return isPositiveTest;
|
1164
|
-
} else {
|
1165
|
-
return !isPositiveTest;
|
1166
|
-
}
|
1167
|
-
});
|
1168
|
-
}
|
1169
|
-
}
|
1170
|
-
}
|
1171
|
-
|
1172
|
-
curFlowNode = conditionFlowNode.antecedent;
|
1173
|
-
continue;
|
1174
|
-
}
|
1175
|
-
|
1176
|
-
if (curFlowNode.flags & (FlowFlags.BranchLabel | FlowFlags.LoopLabel)) {
|
1177
|
-
const labelNode = curFlowNode as FlowLabel;
|
1178
|
-
const newConstraints: ClassType[] = [];
|
1179
|
-
|
1180
|
-
// Prevent infinite recursion by noting that we've been here before.
|
1181
|
-
visitedFlowNodeMap.add(curFlowNode.id);
|
1182
|
-
for (const antecedent of labelNode.antecedents) {
|
1183
|
-
const constraintsToAdd = narrowConstrainedTypeVarRecursive(antecedent, typeVar);
|
1184
|
-
|
1185
|
-
for (const constraint of constraintsToAdd) {
|
1186
|
-
if (!newConstraints.some((t) => isTypeSame(t, constraint))) {
|
1187
|
-
newConstraints.push(constraint);
|
1188
|
-
}
|
1189
|
-
}
|
1190
|
-
}
|
1191
|
-
visitedFlowNodeMap.delete(curFlowNode.id);
|
1192
|
-
|
1193
|
-
return newConstraints;
|
1194
|
-
}
|
1195
|
-
|
1196
|
-
// We shouldn't get here.
|
1197
|
-
fail('Unexpected flow node flags');
|
1198
|
-
return startingConstraints;
|
1199
|
-
}
|
1200
|
-
}
|
1201
|
-
|
1202
|
-
const narrowedConstrainedType = narrowConstrainedTypeVarRecursive(flowNode, typeVar);
|
1203
|
-
|
1204
|
-
// Have we narrowed the typeVar to a single constraint?
|
1205
|
-
return narrowedConstrainedType.length === 1 ? narrowedConstrainedType[0] : undefined;
|
1206
|
-
}
|
1207
|
-
|
1208
|
-
// Determines whether a specified type is the same as a constrained
|
1209
|
-
// TypeVar or is conditioned on that same TypeVar or is some union of
|
1210
|
-
// the above.
|
1211
|
-
function isCompatibleWithConstrainedTypeVar(type: Type, typeVar: TypeVarType) {
|
1212
|
-
let isCompatible = true;
|
1213
|
-
doForEachSubtype(type, (subtype) => {
|
1214
|
-
if (isTypeVar(subtype)) {
|
1215
|
-
if (!isTypeSame(subtype, typeVar)) {
|
1216
|
-
isCompatible = false;
|
1217
|
-
}
|
1218
|
-
} else if (subtype.condition) {
|
1219
|
-
if (
|
1220
|
-
!subtype.condition.some(
|
1221
|
-
(condition) => condition.isConstrainedTypeVar && condition.typeVarName === typeVar.nameWithScope
|
1222
|
-
)
|
1223
|
-
) {
|
1224
|
-
isCompatible = false;
|
1225
|
-
}
|
1226
|
-
} else {
|
1227
|
-
isCompatible = false;
|
1228
|
-
}
|
1229
|
-
});
|
1230
|
-
|
1231
|
-
return isCompatible;
|
1232
|
-
}
|
1233
|
-
|
1234
|
-
// Determines whether a call associated with this flow node returns a NoReturn
|
1235
|
-
// type, thus preventing further traversal of the code flow graph.
|
1236
|
-
function isCallNoReturn(evaluator: TypeEvaluator, flowNode: FlowCall) {
|
1237
|
-
const node = flowNode.node;
|
1238
|
-
|
1239
|
-
if (isPrintCallNoReturnEnabled) {
|
1240
|
-
console.log(`isCallNoReturn@${flowNode.id} Pre depth ${noReturnAnalysisDepth}`);
|
1241
|
-
}
|
1242
|
-
|
1243
|
-
// See if this information is cached already.
|
1244
|
-
if (callIsNoReturnCache.has(node.id)) {
|
1245
|
-
const result = callIsNoReturnCache.get(node.id);
|
1246
|
-
|
1247
|
-
if (isPrintCallNoReturnEnabled) {
|
1248
|
-
console.log(`isCallNoReturn@${flowNode.id} Post: ${result ? 'true' : 'false'} (cached)`);
|
1249
|
-
}
|
1250
|
-
|
1251
|
-
return result;
|
1252
|
-
}
|
1253
|
-
|
1254
|
-
// See if we've exceeded the max recursion depth.
|
1255
|
-
if (noReturnAnalysisDepth > maxTypeRecursionCount) {
|
1256
|
-
return false;
|
1257
|
-
}
|
1258
|
-
|
1259
|
-
// Initially set to false to avoid recursion.
|
1260
|
-
callIsNoReturnCache.set(node.id, false);
|
1261
|
-
|
1262
|
-
noReturnAnalysisDepth++;
|
1263
|
-
|
1264
|
-
try {
|
1265
|
-
let noReturnTypeCount = 0;
|
1266
|
-
let subtypeCount = 0;
|
1267
|
-
|
1268
|
-
// Evaluate the call base type.
|
1269
|
-
const callType = evaluator.getTypeOfExpression(node.leftExpression, EvaluatorFlags.DoNotSpecialize).type;
|
1270
|
-
|
1271
|
-
doForEachSubtype(callType, (callSubtype) => {
|
1272
|
-
// Track the number of subtypes we've examined.
|
1273
|
-
subtypeCount++;
|
1274
|
-
|
1275
|
-
if (isInstantiableClass(callSubtype)) {
|
1276
|
-
// Does the class have a custom metaclass that implements a `__call__` method?
|
1277
|
-
// If so, it will be called instead of `__init__` or `__new__`. We'll assume
|
1278
|
-
// in this case that the __call__ method is not a NoReturn type.
|
1279
|
-
if (
|
1280
|
-
callSubtype.details.effectiveMetaclass &&
|
1281
|
-
isClass(callSubtype.details.effectiveMetaclass) &&
|
1282
|
-
!ClassType.isBuiltIn(callSubtype.details.effectiveMetaclass, 'type')
|
1283
|
-
) {
|
1284
|
-
const metaclassCallMember = lookUpClassMember(
|
1285
|
-
callSubtype.details.effectiveMetaclass,
|
1286
|
-
'__call__',
|
1287
|
-
ClassMemberLookupFlags.SkipInstanceVariables | ClassMemberLookupFlags.SkipObjectBaseClass
|
1288
|
-
);
|
1289
|
-
if (metaclassCallMember) {
|
1290
|
-
return;
|
1291
|
-
}
|
1292
|
-
}
|
1293
|
-
|
1294
|
-
let constructorMember = lookUpClassMember(
|
1295
|
-
callSubtype,
|
1296
|
-
'__init__',
|
1297
|
-
ClassMemberLookupFlags.SkipInstanceVariables | ClassMemberLookupFlags.SkipObjectBaseClass
|
1298
|
-
);
|
1299
|
-
|
1300
|
-
if (constructorMember === undefined) {
|
1301
|
-
constructorMember = lookUpClassMember(
|
1302
|
-
callSubtype,
|
1303
|
-
'__new__',
|
1304
|
-
ClassMemberLookupFlags.SkipInstanceVariables | ClassMemberLookupFlags.SkipObjectBaseClass
|
1305
|
-
);
|
1306
|
-
}
|
1307
|
-
|
1308
|
-
if (constructorMember) {
|
1309
|
-
const constructorType = evaluator.getTypeOfMember(constructorMember);
|
1310
|
-
if (constructorType) {
|
1311
|
-
if (isFunction(constructorType) || isOverloadedFunction(constructorType)) {
|
1312
|
-
const boundConstructorType = evaluator.bindFunctionToClassOrObject(
|
1313
|
-
undefined,
|
1314
|
-
constructorType
|
1315
|
-
);
|
1316
|
-
if (boundConstructorType) {
|
1317
|
-
callSubtype = boundConstructorType;
|
1318
|
-
}
|
1319
|
-
}
|
1320
|
-
}
|
1321
|
-
}
|
1322
|
-
} else if (isClassInstance(callSubtype)) {
|
1323
|
-
const callMember = lookUpClassMember(
|
1324
|
-
callSubtype,
|
1325
|
-
'__call__',
|
1326
|
-
ClassMemberLookupFlags.SkipInstanceVariables
|
1327
|
-
);
|
1328
|
-
if (callMember) {
|
1329
|
-
const callMemberType = evaluator.getTypeOfMember(callMember);
|
1330
|
-
if (callMemberType) {
|
1331
|
-
if (isFunction(callMemberType) || isOverloadedFunction(callMemberType)) {
|
1332
|
-
const boundCallType = evaluator.bindFunctionToClassOrObject(undefined, callMemberType);
|
1333
|
-
if (boundCallType) {
|
1334
|
-
callSubtype = boundCallType;
|
1335
|
-
}
|
1336
|
-
}
|
1337
|
-
}
|
1338
|
-
}
|
1339
|
-
}
|
1340
|
-
|
1341
|
-
const isCallAwaited = node.parent?.nodeType === ParseNodeType.Await;
|
1342
|
-
if (isFunction(callSubtype)) {
|
1343
|
-
if (isFunctionNoReturn(callSubtype, isCallAwaited)) {
|
1344
|
-
noReturnTypeCount++;
|
1345
|
-
}
|
1346
|
-
} else if (isOverloadedFunction(callSubtype)) {
|
1347
|
-
let overloadCount = 0;
|
1348
|
-
let noReturnOverloadCount = 0;
|
1349
|
-
|
1350
|
-
callSubtype.overloads.forEach((overload) => {
|
1351
|
-
if (FunctionType.isOverloaded(overload)) {
|
1352
|
-
overloadCount++;
|
1353
|
-
|
1354
|
-
if (isFunctionNoReturn(overload, isCallAwaited)) {
|
1355
|
-
noReturnOverloadCount++;
|
1356
|
-
}
|
1357
|
-
}
|
1358
|
-
});
|
1359
|
-
|
1360
|
-
// Was at least one of the overloaded return types NoReturn?
|
1361
|
-
if (noReturnOverloadCount > 0) {
|
1362
|
-
if (noReturnOverloadCount === overloadCount) {
|
1363
|
-
noReturnTypeCount++;
|
1364
|
-
}
|
1365
|
-
|
1366
|
-
// For now, assume that if some (but not all) overloads return
|
1367
|
-
// NoReturn that the call is not a NoReturn.
|
1368
|
-
}
|
1369
|
-
}
|
1370
|
-
});
|
1371
|
-
|
1372
|
-
// The call is considered NoReturn if all subtypes evaluate to NoReturn.
|
1373
|
-
const callIsNoReturn = subtypeCount > 0 && noReturnTypeCount === subtypeCount;
|
1374
|
-
|
1375
|
-
// Cache the value for next time.
|
1376
|
-
callIsNoReturnCache.set(node.id, callIsNoReturn);
|
1377
|
-
|
1378
|
-
if (isPrintCallNoReturnEnabled) {
|
1379
|
-
console.log(`isCallNoReturn@${flowNode.id} Post: ${callIsNoReturn ? 'true' : 'false'}`);
|
1380
|
-
}
|
1381
|
-
|
1382
|
-
return callIsNoReturn;
|
1383
|
-
} finally {
|
1384
|
-
noReturnAnalysisDepth--;
|
1385
|
-
}
|
1386
|
-
}
|
1387
|
-
|
1388
|
-
function isFunctionNoReturn(functionType: FunctionType, isCallAwaited: boolean) {
|
1389
|
-
const returnType = functionType.details.declaredReturnType;
|
1390
|
-
if (FunctionType.isAsync(functionType)) {
|
1391
|
-
if (
|
1392
|
-
returnType &&
|
1393
|
-
isClassInstance(returnType) &&
|
1394
|
-
ClassType.isBuiltIn(returnType, 'Coroutine') &&
|
1395
|
-
returnType.typeArguments &&
|
1396
|
-
returnType.typeArguments.length >= 3
|
1397
|
-
) {
|
1398
|
-
if (isNever(returnType.typeArguments[2]) && isCallAwaited) {
|
1399
|
-
return true;
|
1400
|
-
}
|
1401
|
-
}
|
1402
|
-
} else if (returnType) {
|
1403
|
-
return isNever(returnType);
|
1404
|
-
} else if (functionType.details.declaration) {
|
1405
|
-
// If the function has yield expressions, it's a generator, and
|
1406
|
-
// we'll assume the yield statements are reachable. Also, don't
|
1407
|
-
// infer a "no return" type for abstract methods.
|
1408
|
-
if (
|
1409
|
-
!functionType.details.declaration.yieldStatements &&
|
1410
|
-
!FunctionType.isAbstractMethod(functionType) &&
|
1411
|
-
!FunctionType.isStubDefinition(functionType) &&
|
1412
|
-
!FunctionType.isPyTypedDefinition(functionType)
|
1413
|
-
) {
|
1414
|
-
// Check specifically for a common idiom where the only statement
|
1415
|
-
// (other than a possible docstring) is a "raise NotImplementedError".
|
1416
|
-
const functionStatements = functionType.details.declaration.node.suite.statements;
|
1417
|
-
|
1418
|
-
let foundRaiseNotImplemented = false;
|
1419
|
-
for (const statement of functionStatements) {
|
1420
|
-
if (statement.nodeType !== ParseNodeType.StatementList || statement.statements.length !== 1) {
|
1421
|
-
break;
|
1422
|
-
}
|
1423
|
-
|
1424
|
-
const simpleStatement = statement.statements[0];
|
1425
|
-
if (simpleStatement.nodeType === ParseNodeType.StringList) {
|
1426
|
-
continue;
|
1427
|
-
}
|
1428
|
-
|
1429
|
-
if (simpleStatement.nodeType === ParseNodeType.Raise && simpleStatement.typeExpression) {
|
1430
|
-
// Check for "raise NotImplementedError" or "raise NotImplementedError()"
|
1431
|
-
const isNotImplementedName = (node: ParseNode) => {
|
1432
|
-
return node?.nodeType === ParseNodeType.Name && node.value === 'NotImplementedError';
|
1433
|
-
};
|
1434
|
-
|
1435
|
-
if (isNotImplementedName(simpleStatement.typeExpression)) {
|
1436
|
-
foundRaiseNotImplemented = true;
|
1437
|
-
} else if (
|
1438
|
-
simpleStatement.typeExpression.nodeType === ParseNodeType.Call &&
|
1439
|
-
isNotImplementedName(simpleStatement.typeExpression.leftExpression)
|
1440
|
-
) {
|
1441
|
-
foundRaiseNotImplemented = true;
|
1442
|
-
}
|
1443
|
-
}
|
1444
|
-
|
1445
|
-
break;
|
1446
|
-
}
|
1447
|
-
|
1448
|
-
if (!foundRaiseNotImplemented && !isAfterNodeReachable(evaluator, functionType)) {
|
1449
|
-
return true;
|
1450
|
-
}
|
1451
|
-
}
|
1452
|
-
}
|
1453
|
-
|
1454
|
-
return false;
|
1455
|
-
}
|
1456
|
-
|
1457
|
-
function isAfterNodeReachable(evaluator: TypeEvaluator, functionType: FunctionType) {
|
1458
|
-
if (!functionType.details.declaration) {
|
1459
|
-
return true;
|
1460
|
-
}
|
1461
|
-
|
1462
|
-
return evaluator.isAfterNodeReachable(functionType.details.declaration.node);
|
1463
|
-
}
|
1464
|
-
|
1465
|
-
// Performs a cursory analysis to determine whether the expression
|
1466
|
-
// corresponds to a context manager object that supports the swallowing
|
1467
|
-
// of exceptions. By convention, these objects have an "__exit__" method
|
1468
|
-
// that returns a bool response (as opposed to a None). This function is
|
1469
|
-
// called during code flow, so it can't rely on full type evaluation. It
|
1470
|
-
// makes some simplifying assumptions that work in most cases.
|
1471
|
-
function isExceptionContextManager(evaluator: TypeEvaluator, node: ExpressionNode, isAsync: boolean) {
|
1472
|
-
// See if this information is cached already.
|
1473
|
-
if (isExceptionContextManagerCache.has(node.id)) {
|
1474
|
-
return isExceptionContextManagerCache.get(node.id);
|
1475
|
-
}
|
1476
|
-
|
1477
|
-
// Initially set to false to avoid infinite recursion.
|
1478
|
-
isExceptionContextManagerCache.set(node.id, false);
|
1479
|
-
|
1480
|
-
// See if we've exceeded the max recursion depth.
|
1481
|
-
if (contextManagerAnalysisDepth > maxTypeRecursionCount) {
|
1482
|
-
return false;
|
1483
|
-
}
|
1484
|
-
|
1485
|
-
contextManagerAnalysisDepth++;
|
1486
|
-
let cmSwallowsExceptions = false;
|
1487
|
-
|
1488
|
-
try {
|
1489
|
-
const cmType = evaluator.getTypeOfExpression(node).type;
|
1490
|
-
|
1491
|
-
if (cmType && isClassInstance(cmType)) {
|
1492
|
-
const exitMethodName = isAsync ? '__aexit__' : '__exit__';
|
1493
|
-
const exitType = evaluator.getTypeOfObjectMember(node, cmType, exitMethodName)?.type;
|
1494
|
-
|
1495
|
-
if (exitType && isFunction(exitType) && exitType.details.declaredReturnType) {
|
1496
|
-
const returnType = exitType.details.declaredReturnType;
|
1497
|
-
cmSwallowsExceptions = isClassInstance(returnType) && ClassType.isBuiltIn(returnType, 'bool');
|
1498
|
-
}
|
1499
|
-
}
|
1500
|
-
} finally {
|
1501
|
-
contextManagerAnalysisDepth--;
|
1502
|
-
}
|
1503
|
-
|
1504
|
-
// Cache the value for next time.
|
1505
|
-
isExceptionContextManagerCache.set(node.id, cmSwallowsExceptions);
|
1506
|
-
|
1507
|
-
return cmSwallowsExceptions;
|
1508
|
-
}
|
1509
|
-
|
1510
|
-
function getTypeFromWildcardImport(flowNode: FlowWildcardImport, name: string): Type {
|
1511
|
-
const importInfo = getImportInfo(flowNode.node.module);
|
1512
|
-
assert(importInfo !== undefined && importInfo.isImportFound);
|
1513
|
-
assert(flowNode.node.isWildcardImport);
|
1514
|
-
|
1515
|
-
const symbolWithScope = evaluator.lookUpSymbolRecursive(flowNode.node, name, /* honorCodeFlow */ false);
|
1516
|
-
assert(symbolWithScope !== undefined);
|
1517
|
-
const decls = symbolWithScope!.symbol.getDeclarations();
|
1518
|
-
const wildcardDecl = decls.find((decl) => decl.node === flowNode.node);
|
1519
|
-
|
1520
|
-
if (!wildcardDecl) {
|
1521
|
-
return UnknownType.create();
|
1522
|
-
}
|
1523
|
-
|
1524
|
-
return evaluator.getInferredTypeOfDeclaration(symbolWithScope!.symbol, wildcardDecl) || UnknownType.create();
|
1525
|
-
}
|
1526
|
-
|
1527
|
-
function printControlFlowGraph(
|
1528
|
-
flowNode: FlowNode,
|
1529
|
-
reference: CodeFlowReferenceExpressionNode | undefined,
|
1530
|
-
callName: string
|
1531
|
-
) {
|
1532
|
-
let referenceText = '';
|
1533
|
-
if (reference) {
|
1534
|
-
const fileInfo = getFileInfo(reference);
|
1535
|
-
const pos = convertOffsetToPosition(reference.start, fileInfo.lines);
|
1536
|
-
referenceText = `${printExpression(reference)}[${pos.line + 1}:${pos.character + 1}]`;
|
1537
|
-
}
|
1538
|
-
|
1539
|
-
console.log(`${callName}@${flowNode.id}: ${referenceText || '(none)'}`);
|
1540
|
-
console.log(formatControlFlowGraph(flowNode));
|
1541
|
-
}
|
1542
|
-
|
1543
|
-
return {
|
1544
|
-
createCodeFlowAnalyzer,
|
1545
|
-
isFlowNodeReachable,
|
1546
|
-
narrowConstrainedTypeVar,
|
1547
|
-
};
|
1548
|
-
}
|