@zzzen/pyright-internal 1.2.0-dev.20231119 → 1.2.0-dev.20231126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/analysis.d.ts +1 -1
- package/dist/analyzer/analysis.js +5 -1
- package/dist/analyzer/analysis.js.map +1 -1
- package/dist/analyzer/analyzerFileInfo.d.ts +1 -1
- package/dist/analyzer/analyzerNodeInfo.d.ts +1 -1
- package/dist/analyzer/analyzerNodeInfo.js +1 -1
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +198 -194
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/cacheManager.js +1 -1
- package/dist/analyzer/cacheManager.js.map +1 -1
- package/dist/analyzer/checker.js +257 -239
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +1 -1
- package/dist/analyzer/codeFlowEngine.js +26 -26
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +1 -1
- package/dist/analyzer/codeFlowTypes.js +23 -23
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +39 -37
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +40 -47
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +8 -8
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +23 -25
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +67 -63
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +2 -2
- package/dist/analyzer/declaration.js +10 -10
- package/dist/analyzer/declaration.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +41 -41
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.js +51 -51
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.js +27 -27
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +4 -4
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -1
- package/dist/analyzer/importResolver.js +21 -17
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.js +1 -1
- package/dist/analyzer/importResult.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +31 -27
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +36 -32
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +78 -78
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeReport.d.ts +1 -1
- package/dist/analyzer/packageTypeReport.js +2 -2
- package/dist/analyzer/packageTypeReport.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +90 -90
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +14 -14
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parentDirectoryCache.d.ts +2 -2
- package/dist/analyzer/parseTreeCleaner.js +5 -1
- package/dist/analyzer/parseTreeCleaner.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/parseTreeUtils.js +383 -379
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +161 -157
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +1 -1
- package/dist/analyzer/patternMatching.js +52 -50
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +18 -14
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +53 -44
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -14
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/pythonPathUtils.js +5 -1
- package/dist/analyzer/pythonPathUtils.js.map +1 -1
- package/dist/analyzer/regions.js +3 -3
- package/dist/analyzer/regions.js.map +1 -1
- package/dist/analyzer/scope.js +8 -8
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/scopeUtils.js +1 -1
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/service.js +5 -1
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +25 -21
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +2 -2
- package/dist/analyzer/sourceMapper.js +12 -8
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +40 -40
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +1 -1
- package/dist/analyzer/symbol.js +26 -26
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/symbolUtils.js +1 -1
- package/dist/analyzer/symbolUtils.js.map +1 -1
- package/dist/analyzer/testWalker.js +5 -5
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +1 -1
- package/dist/analyzer/tracePrinter.js +35 -31
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.js +5 -1
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +13 -9
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +1233 -1153
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -1
- package/dist/analyzer/typeEvaluatorTypes.js +3 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +1 -1
- package/dist/analyzer/typeGuards.js +79 -65
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +1 -1
- package/dist/analyzer/typePrinter.js +80 -76
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +26 -22
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +123 -123
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +9 -9
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.js +10 -10
- package/dist/analyzer/typedDicts.js +74 -70
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +16 -11
- package/dist/analyzer/types.js +179 -177
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +2 -2
- package/dist/backgroundAnalysisBase.js +5 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.js +5 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/commandController.js +7 -7
- package/dist/commands/commandController.js.map +1 -1
- package/dist/commands/commandResult.js +1 -1
- package/dist/commands/commandResult.js.map +1 -1
- package/dist/commands/commands.js +1 -1
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +196 -196
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/charCodes.js +1 -1
- package/dist/common/charCodes.js.map +1 -1
- package/dist/common/chokidarFileWatcherProvider.js +5 -1
- package/dist/common/chokidarFileWatcherProvider.js.map +1 -1
- package/dist/common/collectionUtils.d.ts +3 -3
- package/dist/common/collectionUtils.js +3 -3
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -1
- package/dist/common/commandLineOptions.js +5 -5
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -1
- package/dist/common/configOptions.js +11 -7
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.js +7 -3
- package/dist/common/console.js.map +1 -1
- package/dist/common/core.d.ts +2 -2
- package/dist/common/core.js +6 -6
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.js +6 -6
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/diagnosticRules.js +1 -1
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/diagnosticSink.js +12 -12
- package/dist/common/diagnosticSink.js.map +1 -1
- package/dist/common/editAction.d.ts +1 -1
- package/dist/common/editAction.js +2 -2
- package/dist/common/editAction.js.map +1 -1
- package/dist/common/envVarUtils.js +5 -1
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.js +1 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.js +5 -1
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js +2 -2
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/fileWatcher.d.ts +2 -2
- package/dist/common/fullAccessHost.js +10 -6
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +1 -1
- package/dist/common/host.js +2 -2
- package/dist/common/host.js.map +1 -1
- package/dist/common/lspUtils.js +7 -7
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/memUtils.d.ts +1 -1
- package/dist/common/pathUtils.js +12 -8
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/pythonVersion.js +1 -1
- package/dist/common/pythonVersion.js.map +1 -1
- package/dist/common/realFileSystem.js +5 -1
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.d.ts +1 -1
- package/dist/common/serviceProvider.js +5 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/serviceProviderExtensions.js +1 -1
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/stringUtils.js +5 -5
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.js +11 -7
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRange.js +3 -3
- package/dist/common/textRange.js.map +1 -1
- package/dist/languageServerBase.js +13 -13
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +3 -3
- package/dist/languageService/autoImporter.js +12 -8
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +27 -23
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/codeActionProvider.js +8 -8
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +166 -162
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.js +9 -9
- package/dist/languageService/completionProviderUtils.js.map +1 -1
- package/dist/languageService/definitionProvider.js +14 -10
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +7 -3
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +1 -1
- package/dist/languageService/documentSymbolCollector.js +21 -17
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +30 -26
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.js +1 -1
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/quickActions.js +10 -6
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +1 -1
- package/dist/languageService/referencesProvider.js +24 -20
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +8 -4
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.js +8 -4
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +20 -16
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +5 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +7 -9
- package/dist/localization/localize.js +5 -4
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +0 -3
- package/dist/localization/package.nls.de.json +0 -3
- package/dist/localization/package.nls.en-us.json +4 -3
- package/dist/localization/package.nls.es.json +0 -3
- package/dist/localization/package.nls.fr.json +0 -3
- package/dist/localization/package.nls.it.json +0 -3
- package/dist/localization/package.nls.ja.json +0 -3
- package/dist/localization/package.nls.ko.json +0 -3
- package/dist/localization/package.nls.pl.json +0 -3
- package/dist/localization/package.nls.pt-br.json +0 -3
- package/dist/localization/package.nls.qps-ploc.json +0 -3
- package/dist/localization/package.nls.ru.json +0 -3
- package/dist/localization/package.nls.tr.json +0 -3
- package/dist/localization/package.nls.zh-cn.json +0 -3
- package/dist/localization/package.nls.zh-tw.json +0 -3
- package/dist/parser/characterStream.js +3 -3
- package/dist/parser/characterStream.js.map +1 -1
- package/dist/parser/characters.js +13 -9
- package/dist/parser/characters.js.map +1 -1
- package/dist/parser/parseNodes.d.ts +12 -12
- package/dist/parser/parseNodes.js +193 -193
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.js +563 -559
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.js +47 -47
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.js +288 -288
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.js +35 -35
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/parser/unicode.d.ts +3 -3
- package/dist/pyright.js +21 -17
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +1 -0
- package/dist/pyrightFileSystem.js +1 -1
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +1 -0
- package/dist/tests/chainedSourceFiles.test.js +5 -1
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +5 -1
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/collectionUtils.test.js +5 -1
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/common.test.js +5 -1
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/debug.test.js +8 -4
- package/dist/tests/debug.test.js.map +1 -1
- package/dist/tests/deferred.test.js +5 -1
- package/dist/tests/deferred.test.js.map +1 -1
- package/dist/tests/diagnosticOverrides.test.js +5 -1
- package/dist/tests/diagnosticOverrides.test.js.map +1 -1
- package/dist/tests/docStringUtils.test.js +5 -1
- package/dist/tests/docStringUtils.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +5 -1
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +5 -1
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourSlashRunner.test.js +5 -1
- package/dist/tests/fourSlashRunner.test.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashParser.js +13 -13
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.js +11 -7
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/runner.d.ts +1 -1
- package/dist/tests/harness/fourslash/runner.js +5 -1
- package/dist/tests/harness/fourslash/runner.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +5 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.Consts.js +6 -2
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +17 -13
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/fourslash/testStateUtils.js +9 -5
- package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +5 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
- package/dist/tests/harness/testHost.js +5 -1
- package/dist/tests/harness/testHost.js.map +1 -1
- package/dist/tests/harness/utils.d.ts +13 -12
- package/dist/tests/harness/utils.js.map +1 -1
- package/dist/tests/harness/vfs/factory.js +6 -2
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +4 -3
- package/dist/tests/harness/vfs/filesystem.js +11 -7
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +30 -26
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +25 -25
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +6 -6
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/localizer.test.js +5 -1
- package/dist/tests/localizer.test.js.map +1 -1
- package/dist/tests/logger.test.js +5 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +10 -10
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +13 -9
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +5 -1
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +5 -1
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +5 -1
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/stringUtils.test.js +10 -6
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symbolNameUtils.test.js +5 -1
- package/dist/tests/symbolNameUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +5 -1
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testUtils.js +11 -7
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textRange.test.js +5 -1
- package/dist/tests/textRange.test.js.map +1 -1
- package/dist/tests/tokenizer.test.js +463 -459
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +14 -2
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +11 -3
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +11 -3
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +10 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +5 -1
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +44 -40
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +5 -1
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/tests/zipfs.test.js +5 -1
- package/dist/tests/zipfs.test.js.map +1 -1
- package/dist/workspaceFactory.js +2 -2
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -2
@@ -42,6 +42,7 @@ export declare const enum EvaluatorFlags {
|
|
42
42
|
AllowUnpackedTypedDict = 8388608,
|
43
43
|
DisallowPep695TypeAlias = 16777216,
|
44
44
|
SkipConvertParamSpecToRuntimeObject = 33554432,
|
45
|
+
DisallowNonTypeSpecialForms = 67108864,
|
45
46
|
CallBaseDefaults = 16777218,
|
46
47
|
IndexBaseDefaults = 2,
|
47
48
|
MemberAccessBaseDefaults = 16777218
|
@@ -113,7 +114,7 @@ export interface FunctionArgumentWithType extends FunctionArgumentBase {
|
|
113
114
|
export interface FunctionArgumentWithExpression extends FunctionArgumentBase {
|
114
115
|
valueExpression: ExpressionNode;
|
115
116
|
}
|
116
|
-
export
|
117
|
+
export type FunctionArgument = FunctionArgumentWithType | FunctionArgumentWithExpression;
|
117
118
|
export interface EffectiveTypeResult {
|
118
119
|
type: Type;
|
119
120
|
isIncomplete: boolean;
|
@@ -155,6 +156,7 @@ export interface ExpectedTypeOptions {
|
|
155
156
|
allowForwardReference?: boolean;
|
156
157
|
allowTypeVarsWithoutScopeId?: boolean;
|
157
158
|
enforceTypeAnnotationRules?: boolean;
|
159
|
+
disallowProtocolAndTypedDict?: boolean;
|
158
160
|
}
|
159
161
|
export interface ExpectedTypeResult {
|
160
162
|
type: Type;
|
@@ -81,11 +81,13 @@ var EvaluatorFlags;
|
|
81
81
|
// If evaluation is a TypeVarType that is a ParamSpec, do
|
82
82
|
// not convert it to its corresponding ParamSpec runtime object.
|
83
83
|
EvaluatorFlags[EvaluatorFlags["SkipConvertParamSpecToRuntimeObject"] = 33554432] = "SkipConvertParamSpecToRuntimeObject";
|
84
|
+
// Protocol and TypedDict are not allowed in this context.
|
85
|
+
EvaluatorFlags[EvaluatorFlags["DisallowNonTypeSpecialForms"] = 67108864] = "DisallowNonTypeSpecialForms";
|
84
86
|
// Defaults used for evaluating the LHS of a call expression.
|
85
87
|
EvaluatorFlags[EvaluatorFlags["CallBaseDefaults"] = 16777218] = "CallBaseDefaults";
|
86
88
|
// Defaults used for evaluating the LHS of a member access expression.
|
87
89
|
EvaluatorFlags[EvaluatorFlags["IndexBaseDefaults"] = 2] = "IndexBaseDefaults";
|
88
90
|
// Defaults used for evaluating the LHS of a member access expression.
|
89
91
|
EvaluatorFlags[EvaluatorFlags["MemberAccessBaseDefaults"] = 16777218] = "MemberAccessBaseDefaults";
|
90
|
-
})(EvaluatorFlags
|
92
|
+
})(EvaluatorFlags || (exports.EvaluatorFlags = EvaluatorFlags = {}));
|
91
93
|
//# sourceMappingURL=typeEvaluatorTypes.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typeEvaluatorTypes.js","sourceRoot":"","sources":["../../../src/analyzer/typeEvaluatorTypes.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA8CH,gEAAgE;AAChE,kDAAkD;AACrC,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,IAAkB,
|
1
|
+
{"version":3,"file":"typeEvaluatorTypes.js","sourceRoot":"","sources":["../../../src/analyzer/typeEvaluatorTypes.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA8CH,gEAAgE;AAChE,kDAAkD;AACrC,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAE7C,IAAkB,cAyGjB;AAzGD,WAAkB,cAAc;IAC5B,mDAAQ,CAAA;IAER,uDAAuD;IACvD,mFAA6B,CAAA;IAE7B,0DAA0D;IAC1D,gEAAgE;IAChE,SAAS;IACT,yEAAwB,CAAA;IAExB,yDAAyD;IACzD,uFAA+B,CAAA;IAE/B,kCAAkC;IAClC,iGAAoC,CAAA;IAEpC,0CAA0C;IAC1C,sEAAsB,CAAA;IAEtB,6CAA6C;IAC7C,8EAA0B,CAAA;IAE1B,gDAAgD;IAChD,oFAA6B,CAAA;IAE7B,2DAA2D;IAC3D,4BAA4B;IAC5B,+FAAkC,CAAA;IAElC,gEAAgE;IAChE,6DAA6D;IAC7D,qBAAqB;IACrB,2FAAgC,CAAA;IAEhC,qEAAqE;IACrE,qFAA6B,CAAA;IAE7B,2DAA2D;IAC3D,gDAAgD;IAChD,wFAA+B,CAAA;IAE/B,8DAA8D;IAC9D,0BAA0B;IAC1B,oGAAqC,CAAA;IAErC,oEAAoE;IACpE,0BAA0B;IAC1B,oGAAqC,CAAA;IAErC,yDAAyD;IACzD,2DAA2D;IAC3D,mCAAmC;IACnC,gHAA2C,CAAA;IAE3C,yDAAyD;IACzD,6DAA6D;IAC7D,uDAAuD;IACvD,iHAA2C,CAAA;IAE3C,mDAAmD;IACnD,2FAAgC,CAAA;IAEhC,6CAA6C;IAC7C,gFAA0B,CAAA;IAE1B,mEAAmE;IACnE,wFAA8B,CAAA;IAE9B,iEAAiE;IACjE,iCAAiC;IACjC,4FAAgC,CAAA;IAEhC,wDAAwD;IACxD,2EAAuB,CAAA;IAEvB,uDAAuD;IACvD,iHAA0C,CAAA;IAE1C,6DAA6D;IAC7D,2DAA2D;IAC3D,oDAAoD;IACpD,6GAAwC,CAAA;IAExC,yCAAyC;IACzC,6FAAgC,CAAA;IAEhC,yDAAyD;IACzD,gGAAiC,CAAA;IAEjC,yDAAyD;IACzD,gEAAgE;IAChE,wHAA6C,CAAA;IAE7C,0DAA0D;IAC1D,wGAAqC,CAAA;IAErC,6DAA6D;IAC7D,kFAA4D,CAAA;IAE5D,sEAAsE;IACtE,6EAAmC,CAAA;IAEnC,sEAAsE;IACtE,kGAAoE,CAAA;AACxE,CAAC,EAzGiB,cAAc,8BAAd,cAAc,QAyG/B"}
|
@@ -5,7 +5,7 @@ export interface TypeNarrowingResult {
|
|
5
5
|
type: Type;
|
6
6
|
isIncomplete: boolean;
|
7
7
|
}
|
8
|
-
export
|
8
|
+
export type TypeNarrowingCallback = (type: Type) => TypeNarrowingResult | undefined;
|
9
9
|
export declare function getTypeNarrowingCallback(evaluator: TypeEvaluator, reference: ExpressionNode, testExpression: ExpressionNode, isPositiveTest: boolean, recursionCount?: number): TypeNarrowingCallback | undefined;
|
10
10
|
export declare function isIsinstanceFilterSuperclass(evaluator: TypeEvaluator, varType: Type, concreteVarType: ClassType, filterType: Type, concreteFilterType: ClassType, isInstanceCheck: boolean): boolean;
|
11
11
|
export declare function isIsinstanceFilterSubclass(evaluator: TypeEvaluator, varType: ClassType, concreteFilterType: ClassType, isInstanceCheck: boolean): boolean;
|
@@ -11,7 +11,11 @@
|
|
11
11
|
*/
|
12
12
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
13
13
|
if (k2 === undefined) k2 = k;
|
14
|
-
Object.
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
17
|
+
}
|
18
|
+
Object.defineProperty(o, k2, desc);
|
15
19
|
}) : (function(o, m, k, k2) {
|
16
20
|
if (k2 === undefined) k2 = k;
|
17
21
|
o[k2] = m[k];
|
@@ -50,25 +54,25 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
50
54
|
return undefined;
|
51
55
|
}
|
52
56
|
recursionCount++;
|
53
|
-
if (testExpression.nodeType === 4 /* AssignmentExpression */) {
|
57
|
+
if (testExpression.nodeType === 4 /* ParseNodeType.AssignmentExpression */) {
|
54
58
|
return getTypeNarrowingCallbackForAssignmentExpression(evaluator, reference, testExpression, isPositiveTest, recursionCount);
|
55
59
|
}
|
56
|
-
if (testExpression.nodeType === 7 /* BinaryOperation */) {
|
57
|
-
const isOrIsNotOperator = testExpression.operator === 39 /* Is */ || testExpression.operator === 40 /* IsNot */;
|
58
|
-
const equalsOrNotEqualsOperator = testExpression.operator === 12 /* Equals */ || testExpression.operator === 28 /* NotEquals */;
|
60
|
+
if (testExpression.nodeType === 7 /* ParseNodeType.BinaryOperation */) {
|
61
|
+
const isOrIsNotOperator = testExpression.operator === 39 /* OperatorType.Is */ || testExpression.operator === 40 /* OperatorType.IsNot */;
|
62
|
+
const equalsOrNotEqualsOperator = testExpression.operator === 12 /* OperatorType.Equals */ || testExpression.operator === 28 /* OperatorType.NotEquals */;
|
59
63
|
if (isOrIsNotOperator || equalsOrNotEqualsOperator) {
|
60
64
|
// Invert the "isPositiveTest" value if this is an "is not" operation.
|
61
|
-
const adjIsPositiveTest = testExpression.operator === 39 /* Is */ || testExpression.operator === 12 /* Equals */
|
65
|
+
const adjIsPositiveTest = testExpression.operator === 39 /* OperatorType.Is */ || testExpression.operator === 12 /* OperatorType.Equals */
|
62
66
|
? isPositiveTest
|
63
67
|
: !isPositiveTest;
|
64
68
|
// Look for "X is None", "X is not None", "X == None", and "X != None".
|
65
69
|
// These are commonly-used patterns used in control flow.
|
66
|
-
if (testExpression.rightExpression.nodeType === 11 /* Constant */ &&
|
67
|
-
testExpression.rightExpression.constType === 26 /* None */) {
|
70
|
+
if (testExpression.rightExpression.nodeType === 11 /* ParseNodeType.Constant */ &&
|
71
|
+
testExpression.rightExpression.constType === 26 /* KeywordType.None */) {
|
68
72
|
// Allow the LHS to be either a simple expression or an assignment
|
69
73
|
// expression that assigns to a simple name.
|
70
74
|
let leftExpression = testExpression.leftExpression;
|
71
|
-
if (leftExpression.nodeType === 4 /* AssignmentExpression */) {
|
75
|
+
if (leftExpression.nodeType === 4 /* ParseNodeType.AssignmentExpression */) {
|
72
76
|
leftExpression = leftExpression.name;
|
73
77
|
}
|
74
78
|
if (ParseTreeUtils.isMatchingExpression(reference, leftExpression)) {
|
@@ -76,13 +80,13 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
76
80
|
return { type: narrowTypeForIsNone(evaluator, type, adjIsPositiveTest), isIncomplete: false };
|
77
81
|
};
|
78
82
|
}
|
79
|
-
if (leftExpression.nodeType === 24 /* Index */ &&
|
83
|
+
if (leftExpression.nodeType === 24 /* ParseNodeType.Index */ &&
|
80
84
|
ParseTreeUtils.isMatchingExpression(reference, leftExpression.baseExpression) &&
|
81
85
|
leftExpression.items.length === 1 &&
|
82
86
|
!leftExpression.trailingComma &&
|
83
|
-
leftExpression.items[0].argumentCategory === 0 /* Simple */ &&
|
87
|
+
leftExpression.items[0].argumentCategory === 0 /* ArgumentCategory.Simple */ &&
|
84
88
|
!leftExpression.items[0].name &&
|
85
|
-
leftExpression.items[0].valueExpression.nodeType === 40 /* Number */ &&
|
89
|
+
leftExpression.items[0].valueExpression.nodeType === 40 /* ParseNodeType.Number */ &&
|
86
90
|
leftExpression.items[0].valueExpression.isInteger &&
|
87
91
|
!leftExpression.items[0].valueExpression.isImaginary) {
|
88
92
|
const indexValue = leftExpression.items[0].valueExpression.value;
|
@@ -97,11 +101,11 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
97
101
|
}
|
98
102
|
}
|
99
103
|
// Look for "X is ...", "X is not ...", "X == ...", and "X != ...".
|
100
|
-
if (testExpression.rightExpression.nodeType === 18 /* Ellipsis */) {
|
104
|
+
if (testExpression.rightExpression.nodeType === 18 /* ParseNodeType.Ellipsis */) {
|
101
105
|
// Allow the LHS to be either a simple expression or an assignment
|
102
106
|
// expression that assigns to a simple name.
|
103
107
|
let leftExpression = testExpression.leftExpression;
|
104
|
-
if (leftExpression.nodeType === 4 /* AssignmentExpression */) {
|
108
|
+
if (leftExpression.nodeType === 4 /* ParseNodeType.AssignmentExpression */) {
|
105
109
|
leftExpression = leftExpression.name;
|
106
110
|
}
|
107
111
|
if (ParseTreeUtils.isMatchingExpression(reference, leftExpression)) {
|
@@ -114,12 +118,12 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
114
118
|
}
|
115
119
|
}
|
116
120
|
// Look for "type(X) is Y", "type(X) is not Y", "type(X) == Y" or "type(X) != Y".
|
117
|
-
if (testExpression.leftExpression.nodeType === 9 /* Call */) {
|
121
|
+
if (testExpression.leftExpression.nodeType === 9 /* ParseNodeType.Call */) {
|
118
122
|
if (testExpression.leftExpression.arguments.length === 1 &&
|
119
|
-
testExpression.leftExpression.arguments[0].argumentCategory === 0 /* Simple */) {
|
123
|
+
testExpression.leftExpression.arguments[0].argumentCategory === 0 /* ArgumentCategory.Simple */) {
|
120
124
|
const arg0Expr = testExpression.leftExpression.arguments[0].valueExpression;
|
121
125
|
if (ParseTreeUtils.isMatchingExpression(reference, arg0Expr)) {
|
122
|
-
const callType = evaluator.getTypeOfExpression(testExpression.leftExpression.leftExpression, 16777218 /* CallBaseDefaults */).type;
|
126
|
+
const callType = evaluator.getTypeOfExpression(testExpression.leftExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */).type;
|
123
127
|
if ((0, types_1.isInstantiableClass)(callType) && types_1.ClassType.isBuiltIn(callType, 'type')) {
|
124
128
|
const classTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
125
129
|
const classType = evaluator.makeTopLevelTypeVarsConcrete(classTypeResult.type);
|
@@ -162,10 +166,10 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
162
166
|
}
|
163
167
|
}
|
164
168
|
// Look for X[<literal>] is <literal> or X[<literal>] is not <literal>.
|
165
|
-
if (testExpression.leftExpression.nodeType === 24 /* Index */ &&
|
169
|
+
if (testExpression.leftExpression.nodeType === 24 /* ParseNodeType.Index */ &&
|
166
170
|
testExpression.leftExpression.items.length === 1 &&
|
167
171
|
!testExpression.leftExpression.trailingComma &&
|
168
|
-
testExpression.leftExpression.items[0].argumentCategory === 0 /* Simple */ &&
|
172
|
+
testExpression.leftExpression.items[0].argumentCategory === 0 /* ArgumentCategory.Simple */ &&
|
169
173
|
ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression.baseExpression)) {
|
170
174
|
const indexTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression.items[0].valueExpression);
|
171
175
|
const indexType = indexTypeResult.type;
|
@@ -208,7 +212,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
208
212
|
}
|
209
213
|
if (equalsOrNotEqualsOperator) {
|
210
214
|
// Look for X == <literal> or X != <literal>
|
211
|
-
const adjIsPositiveTest = testExpression.operator === 12 /* Equals */ ? isPositiveTest : !isPositiveTest;
|
215
|
+
const adjIsPositiveTest = testExpression.operator === 12 /* OperatorType.Equals */ ? isPositiveTest : !isPositiveTest;
|
212
216
|
if (ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression)) {
|
213
217
|
const rightTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
214
218
|
const rightType = rightTypeResult.type;
|
@@ -223,10 +227,10 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
223
227
|
}
|
224
228
|
}
|
225
229
|
// Look for X[<literal>] == <literal> or X[<literal>] != <literal>
|
226
|
-
if (testExpression.leftExpression.nodeType === 24 /* Index */ &&
|
230
|
+
if (testExpression.leftExpression.nodeType === 24 /* ParseNodeType.Index */ &&
|
227
231
|
testExpression.leftExpression.items.length === 1 &&
|
228
232
|
!testExpression.leftExpression.trailingComma &&
|
229
|
-
testExpression.leftExpression.items[0].argumentCategory === 0 /* Simple */ &&
|
233
|
+
testExpression.leftExpression.items[0].argumentCategory === 0 /* ArgumentCategory.Simple */ &&
|
230
234
|
ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression.baseExpression)) {
|
231
235
|
const indexTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression.items[0].valueExpression);
|
232
236
|
const indexType = indexTypeResult.type;
|
@@ -255,11 +259,11 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
255
259
|
}
|
256
260
|
// Look for len(x) == <literal> or len(x) != <literal>
|
257
261
|
if (equalsOrNotEqualsOperator &&
|
258
|
-
testExpression.leftExpression.nodeType === 9 /* Call */ &&
|
262
|
+
testExpression.leftExpression.nodeType === 9 /* ParseNodeType.Call */ &&
|
259
263
|
testExpression.leftExpression.arguments.length === 1) {
|
260
264
|
const arg0Expr = testExpression.leftExpression.arguments[0].valueExpression;
|
261
265
|
if (ParseTreeUtils.isMatchingExpression(reference, arg0Expr)) {
|
262
|
-
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
266
|
+
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
263
267
|
const callType = callTypeResult.type;
|
264
268
|
if ((0, types_1.isFunction)(callType) && callType.details.fullName === 'builtins.len') {
|
265
269
|
const rightTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
@@ -280,7 +284,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
280
284
|
}
|
281
285
|
// Look for X.Y == <literal> or X.Y != <literal>
|
282
286
|
if (equalsOrNotEqualsOperator &&
|
283
|
-
testExpression.leftExpression.nodeType === 35 /* MemberAccess */ &&
|
287
|
+
testExpression.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
|
284
288
|
ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression.leftExpression)) {
|
285
289
|
const rightTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
286
290
|
const rightType = rightTypeResult.type;
|
@@ -296,7 +300,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
296
300
|
}
|
297
301
|
// Look for X.Y is <literal> or X.Y is not <literal> where <literal> is
|
298
302
|
// an enum or bool literal
|
299
|
-
if (testExpression.leftExpression.nodeType === 35 /* MemberAccess */ &&
|
303
|
+
if (testExpression.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
|
300
304
|
ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression.leftExpression)) {
|
301
305
|
const rightTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
302
306
|
const rightType = rightTypeResult.type;
|
@@ -314,10 +318,10 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
314
318
|
}
|
315
319
|
// Look for X.Y is None or X.Y is not None
|
316
320
|
// These are commonly-used patterns used in control flow.
|
317
|
-
if (testExpression.leftExpression.nodeType === 35 /* MemberAccess */ &&
|
321
|
+
if (testExpression.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
|
318
322
|
ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression.leftExpression) &&
|
319
|
-
testExpression.rightExpression.nodeType === 11 /* Constant */ &&
|
320
|
-
testExpression.rightExpression.constType === 26 /* None */) {
|
323
|
+
testExpression.rightExpression.nodeType === 11 /* ParseNodeType.Constant */ &&
|
324
|
+
testExpression.rightExpression.constType === 26 /* KeywordType.None */) {
|
321
325
|
const memberName = testExpression.leftExpression.memberName;
|
322
326
|
return (type) => {
|
323
327
|
return {
|
@@ -327,12 +331,12 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
327
331
|
};
|
328
332
|
}
|
329
333
|
}
|
330
|
-
if (testExpression.operator === 41 /* In */ || testExpression.operator === 42 /* NotIn */) {
|
334
|
+
if (testExpression.operator === 41 /* OperatorType.In */ || testExpression.operator === 42 /* OperatorType.NotIn */) {
|
331
335
|
// Look for "x in y" or "x not in y" where y is one of several built-in types.
|
332
336
|
if (ParseTreeUtils.isMatchingExpression(reference, testExpression.leftExpression)) {
|
333
337
|
const rightTypeResult = evaluator.getTypeOfExpression(testExpression.rightExpression);
|
334
338
|
const rightType = rightTypeResult.type;
|
335
|
-
const adjIsPositiveTest = testExpression.operator === 41 /* In */ ? isPositiveTest : !isPositiveTest;
|
339
|
+
const adjIsPositiveTest = testExpression.operator === 41 /* OperatorType.In */ ? isPositiveTest : !isPositiveTest;
|
336
340
|
return (type) => {
|
337
341
|
return {
|
338
342
|
type: narrowTypeForContainerType(evaluator, type, rightType, adjIsPositiveTest),
|
@@ -346,7 +350,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
346
350
|
const leftTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression);
|
347
351
|
const leftType = leftTypeResult.type;
|
348
352
|
if ((0, types_1.isClassInstance)(leftType) && types_1.ClassType.isBuiltIn(leftType, 'str') && (0, typeUtils_1.isLiteralType)(leftType)) {
|
349
|
-
const adjIsPositiveTest = testExpression.operator === 41 /* In */ ? isPositiveTest : !isPositiveTest;
|
353
|
+
const adjIsPositiveTest = testExpression.operator === 41 /* OperatorType.In */ ? isPositiveTest : !isPositiveTest;
|
350
354
|
return (type) => {
|
351
355
|
return {
|
352
356
|
type: narrowTypeForTypedDictKey(evaluator, type, types_1.ClassType.cloneAsInstantiable(leftType), adjIsPositiveTest),
|
@@ -357,7 +361,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
357
361
|
}
|
358
362
|
}
|
359
363
|
}
|
360
|
-
if (testExpression.nodeType === 9 /* Call */) {
|
364
|
+
if (testExpression.nodeType === 9 /* ParseNodeType.Call */) {
|
361
365
|
// Look for "isinstance(X, Y)" or "issubclass(X, Y)".
|
362
366
|
if (testExpression.arguments.length === 2) {
|
363
367
|
// Make sure the first parameter is a supported expression type
|
@@ -366,15 +370,15 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
366
370
|
const arg0Expr = testExpression.arguments[0].valueExpression;
|
367
371
|
const arg1Expr = testExpression.arguments[1].valueExpression;
|
368
372
|
if (ParseTreeUtils.isMatchingExpression(reference, arg0Expr)) {
|
369
|
-
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
373
|
+
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
370
374
|
const callType = callTypeResult.type;
|
371
375
|
if ((0, types_1.isFunction)(callType) &&
|
372
376
|
(callType.details.builtInName === 'isinstance' || callType.details.builtInName === 'issubclass')) {
|
373
377
|
const isInstanceCheck = callType.details.builtInName === 'isinstance';
|
374
|
-
const arg1TypeResult = evaluator.getTypeOfExpression(arg1Expr, 512 /* AllowMissingTypeArgs */ |
|
375
|
-
8 /* EvaluateStringLiteralAsType */ |
|
376
|
-
32 /* DisallowParamSpec */ |
|
377
|
-
64 /* DisallowTypeVarTuple */);
|
378
|
+
const arg1TypeResult = evaluator.getTypeOfExpression(arg1Expr, 512 /* EvaluatorFlags.AllowMissingTypeArgs */ |
|
379
|
+
8 /* EvaluatorFlags.EvaluateStringLiteralAsType */ |
|
380
|
+
32 /* EvaluatorFlags.DisallowParamSpec */ |
|
381
|
+
64 /* EvaluatorFlags.DisallowTypeVarTuple */);
|
378
382
|
const arg1Type = arg1TypeResult.type;
|
379
383
|
const classTypeList = getIsInstanceClassTypes(arg1Type);
|
380
384
|
const isIncomplete = !!callTypeResult.isIncomplete || !!arg1TypeResult.isIncomplete;
|
@@ -413,7 +417,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
413
417
|
if (testExpression.arguments.length === 1) {
|
414
418
|
const arg0Expr = testExpression.arguments[0].valueExpression;
|
415
419
|
if (ParseTreeUtils.isMatchingExpression(reference, arg0Expr)) {
|
416
|
-
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
420
|
+
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
417
421
|
const callType = callTypeResult.type;
|
418
422
|
if ((0, types_1.isFunction)(callType) && callType.details.builtInName === 'callable') {
|
419
423
|
return (type) => {
|
@@ -432,7 +436,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
432
436
|
// Look for "bool(X)"
|
433
437
|
if (testExpression.arguments.length === 1 && !testExpression.arguments[0].name) {
|
434
438
|
if (ParseTreeUtils.isMatchingExpression(reference, testExpression.arguments[0].valueExpression)) {
|
435
|
-
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
439
|
+
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
436
440
|
const callType = callTypeResult.type;
|
437
441
|
if ((0, types_1.isInstantiableClass)(callType) && types_1.ClassType.isBuiltIn(callType, 'bool')) {
|
438
442
|
return (type) => {
|
@@ -455,7 +459,7 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
455
459
|
(0, types_1.isClassInstance)(type.details.declaredReturnType) &&
|
456
460
|
types_1.ClassType.isBuiltIn(type.details.declaredReturnType, 'TypeGuard'));
|
457
461
|
};
|
458
|
-
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
462
|
+
const callTypeResult = evaluator.getTypeOfExpression(testExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
459
463
|
const callType = callTypeResult.type;
|
460
464
|
if ((0, types_1.isFunction)(callType) && isFunctionReturnTypeGuard(callType)) {
|
461
465
|
isPossiblyTypeGuard = true;
|
@@ -505,8 +509,8 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
505
509
|
// We normally won't find a "not" operator here because they are stripped out
|
506
510
|
// by the binder when it creates condition flow nodes, but we can find this
|
507
511
|
// in the case of local variables type narrowing.
|
508
|
-
if (reference.nodeType === 38 /* Name */) {
|
509
|
-
if (testExpression.nodeType === 55 /* UnaryOperation */ && testExpression.operator === 38 /* Not */) {
|
512
|
+
if (reference.nodeType === 38 /* ParseNodeType.Name */) {
|
513
|
+
if (testExpression.nodeType === 55 /* ParseNodeType.UnaryOperation */ && testExpression.operator === 38 /* OperatorType.Not */) {
|
510
514
|
return getTypeNarrowingCallback(evaluator, reference, testExpression.expression, !isPositiveTest, recursionCount);
|
511
515
|
}
|
512
516
|
}
|
@@ -514,8 +518,8 @@ function getTypeNarrowingCallback(evaluator, reference, testExpression, isPositi
|
|
514
518
|
}
|
515
519
|
exports.getTypeNarrowingCallback = getTypeNarrowingCallback;
|
516
520
|
function getTypeNarrowingCallbackForAliasedCondition(evaluator, reference, testExpression, isPositiveTest, recursionCount) {
|
517
|
-
if (testExpression.nodeType !== 38 /* Name */ ||
|
518
|
-
reference.nodeType !== 38 /* Name */ ||
|
521
|
+
if (testExpression.nodeType !== 38 /* ParseNodeType.Name */ ||
|
522
|
+
reference.nodeType !== 38 /* ParseNodeType.Name */ ||
|
519
523
|
testExpression === reference) {
|
520
524
|
return undefined;
|
521
525
|
}
|
@@ -524,7 +528,7 @@ function getTypeNarrowingCallbackForAliasedCondition(evaluator, reference, testE
|
|
524
528
|
// we need to validate that it is not modified between the test expression
|
525
529
|
// evaluation and the conditional check.
|
526
530
|
const testExprDecl = getDeclsForLocalVar(evaluator, testExpression, testExpression);
|
527
|
-
if (!testExprDecl || testExprDecl.length !== 1 || testExprDecl[0].type !== 1 /* Variable */) {
|
531
|
+
if (!testExprDecl || testExprDecl.length !== 1 || testExprDecl[0].type !== 1 /* DeclarationType.Variable */) {
|
528
532
|
return undefined;
|
529
533
|
}
|
530
534
|
const referenceDecls = getDeclsForLocalVar(evaluator, reference, testExpression);
|
@@ -565,7 +569,7 @@ function getTypeNarrowingCallbackForAliasedCondition(evaluator, reference, testE
|
|
565
569
|
// the current scope.
|
566
570
|
function getDeclsForLocalVar(evaluator, name, reachableFrom) {
|
567
571
|
const scope = (0, scopeUtils_1.getScopeForNode)(name);
|
568
|
-
if ((scope === null || scope === void 0 ? void 0 : scope.type) !== 1 /* Function */ && (scope === null || scope === void 0 ? void 0 : scope.type) !== 3 /* Module */) {
|
572
|
+
if ((scope === null || scope === void 0 ? void 0 : scope.type) !== 1 /* ScopeType.Function */ && (scope === null || scope === void 0 ? void 0 : scope.type) !== 3 /* ScopeType.Module */) {
|
569
573
|
return undefined;
|
570
574
|
}
|
571
575
|
const symbol = scope.lookUpSymbol(name.value);
|
@@ -574,14 +578,14 @@ function getDeclsForLocalVar(evaluator, name, reachableFrom) {
|
|
574
578
|
}
|
575
579
|
const decls = symbol.getDeclarations();
|
576
580
|
if (decls.length === 0 ||
|
577
|
-
decls.some((decl) => decl.type !== 1 /* Variable */ && decl.type !== 2 /* Parameter */)) {
|
581
|
+
decls.some((decl) => decl.type !== 1 /* DeclarationType.Variable */ && decl.type !== 2 /* DeclarationType.Parameter */)) {
|
578
582
|
return undefined;
|
579
583
|
}
|
580
584
|
// If there are any assignments within different scopes (e.g. via a "global" or
|
581
585
|
// "nonlocal" reference), don't consider it a local variable.
|
582
586
|
let prevDeclScope;
|
583
587
|
if (decls.some((decl) => {
|
584
|
-
const nodeToConsider = decl.type === 2 /* Parameter */ ? decl.node.name : decl.node;
|
588
|
+
const nodeToConsider = decl.type === 2 /* DeclarationType.Parameter */ ? decl.node.name : decl.node;
|
585
589
|
const declScopeNode = ParseTreeUtils.getExecutionScopeNode(nodeToConsider);
|
586
590
|
if (prevDeclScope && declScopeNode !== prevDeclScope) {
|
587
591
|
return true;
|
@@ -830,8 +834,8 @@ function getIsInstanceClassTypes(argType) {
|
|
830
834
|
}
|
831
835
|
else if ((0, types_1.isFunction)(subtype) &&
|
832
836
|
subtype.details.parameters.length === 2 &&
|
833
|
-
subtype.details.parameters[0].category === 1 /* ArgsList */ &&
|
834
|
-
subtype.details.parameters[1].category === 2 /* KwargsDict */) {
|
837
|
+
subtype.details.parameters[0].category === 1 /* ParameterCategory.ArgsList */ &&
|
838
|
+
subtype.details.parameters[1].category === 2 /* ParameterCategory.KwargsDict */) {
|
835
839
|
classTypeList.push(subtype);
|
836
840
|
}
|
837
841
|
else {
|
@@ -958,7 +962,7 @@ function narrowTypeForIsInstance(evaluator, type, classTypeList, isInstanceCheck
|
|
958
962
|
if (evaluator.assignType(concreteVarType, concreteFilterType,
|
959
963
|
/* diag */ undefined,
|
960
964
|
/* destTypeVarContext */ undefined,
|
961
|
-
/* srcTypeVarContext */ undefined, 512 /* IgnoreTypeVarScope */ | 4096 /* IgnoreProtocolAssignmentCheck */)) {
|
965
|
+
/* srcTypeVarContext */ undefined, 512 /* AssignTypeFlags.IgnoreTypeVarScope */ | 4096 /* AssignTypeFlags.IgnoreProtocolAssignmentCheck */)) {
|
962
966
|
// If the variable type is a superclass of the isinstance
|
963
967
|
// filter, we can narrow the type to the subclass.
|
964
968
|
let specializedFilterType = filterType;
|
@@ -999,7 +1003,7 @@ function narrowTypeForIsInstance(evaluator, type, classTypeList, isInstanceCheck
|
|
999
1003
|
effectiveMetaclass = concreteFilterType.details.effectiveMetaclass;
|
1000
1004
|
}
|
1001
1005
|
}
|
1002
|
-
let newClassType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.filePath, 0 /* None */, ParseTreeUtils.getTypeSourceId(errorNode),
|
1006
|
+
let newClassType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.filePath, 0 /* ClassTypeFlags.None */, ParseTreeUtils.getTypeSourceId(errorNode),
|
1003
1007
|
/* declaredMetaclass */ undefined, effectiveMetaclass, concreteVarType.details.docString);
|
1004
1008
|
newClassType.details.baseClasses = [
|
1005
1009
|
types_1.ClassType.cloneAsInstantiable(concreteVarType),
|
@@ -1081,7 +1085,7 @@ function narrowTypeForIsInstance(evaluator, type, classTypeList, isInstanceCheck
|
|
1081
1085
|
isCallable = true;
|
1082
1086
|
}
|
1083
1087
|
else {
|
1084
|
-
isCallable = !!(0, typeUtils_1.lookUpClassMember)(concreteVarType, '__call__', 16 /* SkipInstanceMembers */);
|
1088
|
+
isCallable = !!(0, typeUtils_1.lookUpClassMember)(concreteVarType, '__call__', 16 /* MemberAccessFlags.SkipInstanceMembers */);
|
1085
1089
|
}
|
1086
1090
|
}
|
1087
1091
|
if (isCallable) {
|
@@ -1130,7 +1134,16 @@ function narrowTypeForIsInstance(evaluator, type, classTypeList, isInstanceCheck
|
|
1130
1134
|
if ((0, types_1.isInstantiableClass)(concreteFilterType)) {
|
1131
1135
|
const filterMetaclass = concreteFilterType.details.effectiveMetaclass;
|
1132
1136
|
if (filterMetaclass && (0, types_1.isInstantiableClass)(filterMetaclass)) {
|
1133
|
-
|
1137
|
+
let isMetaclassOverlap = evaluator.assignType(metaclassType, types_1.ClassType.cloneAsInstance(filterMetaclass));
|
1138
|
+
// Handle the special case where the metaclass for the filter is type.
|
1139
|
+
// This will normally be treated as type[Any], which is compatible with
|
1140
|
+
// any metaclass, but we specifically want to treat type as the class
|
1141
|
+
// type[object] in this case.
|
1142
|
+
if (types_1.ClassType.isBuiltIn(filterMetaclass, 'type') && !filterMetaclass.isTypeArgumentExplicit) {
|
1143
|
+
if (!types_1.ClassType.isBuiltIn(metaclassType, 'type')) {
|
1144
|
+
isMetaclassOverlap = false;
|
1145
|
+
}
|
1146
|
+
}
|
1134
1147
|
if (isMetaclassOverlap) {
|
1135
1148
|
if (isPositiveTest) {
|
1136
1149
|
filteredTypes.push(filterType);
|
@@ -1173,7 +1186,7 @@ function narrowTypeForIsInstance(evaluator, type, classTypeList, isInstanceCheck
|
|
1173
1186
|
if (evaluator.assignType(varType, (0, typeUtils_1.convertToInstance)(concreteFilterType),
|
1174
1187
|
/* diag */ undefined,
|
1175
1188
|
/* destTypeVarContext */ undefined,
|
1176
|
-
/* srcTypeVarContext */ undefined, 512 /* IgnoreTypeVarScope */)) {
|
1189
|
+
/* srcTypeVarContext */ undefined, 512 /* AssignTypeFlags.IgnoreTypeVarScope */)) {
|
1177
1190
|
// If the filter type is a Callable, use the original type. If the
|
1178
1191
|
// filter type is a callback protocol, use the filter type.
|
1179
1192
|
if ((0, types_1.isFunction)(filterType)) {
|
@@ -1572,6 +1585,7 @@ exports.narrowTypeForDiscriminatedTupleComparison = narrowTypeForDiscriminatedTu
|
|
1572
1585
|
// literal value.
|
1573
1586
|
function narrowTypeForDiscriminatedLiteralFieldComparison(evaluator, referenceType, memberName, literalType, isPositiveTest) {
|
1574
1587
|
const narrowedType = (0, typeUtils_1.mapSubtypes)(referenceType, (subtype) => {
|
1588
|
+
var _a;
|
1575
1589
|
let memberInfo;
|
1576
1590
|
if ((0, types_1.isClassInstance)(subtype)) {
|
1577
1591
|
memberInfo = (0, typeUtils_1.lookUpObjectMember)(subtype, memberName);
|
@@ -1584,7 +1598,7 @@ function narrowTypeForDiscriminatedLiteralFieldComparison(evaluator, referenceTy
|
|
1584
1598
|
// Handle the case where the field is a property
|
1585
1599
|
// that has a declared literal return type for its getter.
|
1586
1600
|
if ((0, types_1.isClassInstance)(subtype) && (0, types_1.isClassInstance)(memberType) && (0, typeUtils_1.isProperty)(memberType)) {
|
1587
|
-
const getterType = memberType.
|
1601
|
+
const getterType = (_a = memberType.fgetInfo) === null || _a === void 0 ? void 0 : _a.methodType;
|
1588
1602
|
if (getterType && getterType.details.declaredReturnType) {
|
1589
1603
|
const getterReturnType = types_1.FunctionType.getSpecializedReturnType(getterType);
|
1590
1604
|
if (getterReturnType) {
|
@@ -1787,14 +1801,14 @@ exports.enumerateLiteralsForType = enumerateLiteralsForType;
|
|
1787
1801
|
function narrowTypeForCallable(evaluator, type, isPositiveTest, errorNode, allowIntersections) {
|
1788
1802
|
return evaluator.mapSubtypesExpandTypeVars(type, /* conditionFilter */ undefined, (subtype) => {
|
1789
1803
|
switch (subtype.category) {
|
1790
|
-
case 4 /* Function */:
|
1791
|
-
case 5 /* OverloadedFunction */: {
|
1804
|
+
case 4 /* TypeCategory.Function */:
|
1805
|
+
case 5 /* TypeCategory.OverloadedFunction */: {
|
1792
1806
|
return isPositiveTest ? subtype : undefined;
|
1793
1807
|
}
|
1794
|
-
case 7 /* Module */: {
|
1808
|
+
case 7 /* TypeCategory.Module */: {
|
1795
1809
|
return isPositiveTest ? undefined : subtype;
|
1796
1810
|
}
|
1797
|
-
case 6 /* Class */: {
|
1811
|
+
case 6 /* TypeCategory.Class */: {
|
1798
1812
|
if ((0, typeUtils_1.isNoneInstance)(subtype)) {
|
1799
1813
|
return isPositiveTest ? undefined : subtype;
|
1800
1814
|
}
|
@@ -1802,7 +1816,7 @@ function narrowTypeForCallable(evaluator, type, isPositiveTest, errorNode, allow
|
|
1802
1816
|
return isPositiveTest ? subtype : undefined;
|
1803
1817
|
}
|
1804
1818
|
// See if the object is callable.
|
1805
|
-
const callMemberType = (0, typeUtils_1.lookUpClassMember)(subtype, '__call__', 16 /* SkipInstanceMembers */);
|
1819
|
+
const callMemberType = (0, typeUtils_1.lookUpClassMember)(subtype, '__call__', 16 /* MemberAccessFlags.SkipInstanceMembers */);
|
1806
1820
|
if (!callMemberType) {
|
1807
1821
|
if (!isPositiveTest) {
|
1808
1822
|
return subtype;
|
@@ -1813,7 +1827,7 @@ function narrowTypeForCallable(evaluator, type, isPositiveTest, errorNode, allow
|
|
1813
1827
|
// new intersection type.
|
1814
1828
|
const className = `<callable subtype of ${subtype.details.name}>`;
|
1815
1829
|
const fileInfo = (0, analyzerNodeInfo_1.getFileInfo)(errorNode);
|
1816
|
-
let newClassType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.filePath, 0 /* None */, ParseTreeUtils.getTypeSourceId(errorNode),
|
1830
|
+
let newClassType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.filePath, 0 /* ClassTypeFlags.None */, ParseTreeUtils.getTypeSourceId(errorNode),
|
1817
1831
|
/* declaredMetaclass */ undefined, subtype.details.effectiveMetaclass, subtype.details.docString);
|
1818
1832
|
newClassType.details.baseClasses = [types_1.ClassType.cloneAsInstantiable(subtype)];
|
1819
1833
|
(0, typeUtils_1.computeMroLinearization)(newClassType);
|
@@ -1821,7 +1835,7 @@ function narrowTypeForCallable(evaluator, type, isPositiveTest, errorNode, allow
|
|
1821
1835
|
// Add a __call__ method to the new class.
|
1822
1836
|
const callMethod = types_1.FunctionType.createSynthesizedInstance('__call__');
|
1823
1837
|
const selfParam = {
|
1824
|
-
category: 0 /* Simple */,
|
1838
|
+
category: 0 /* ParameterCategory.Simple */,
|
1825
1839
|
name: 'self',
|
1826
1840
|
type: types_1.ClassType.cloneAsInstance(newClassType),
|
1827
1841
|
hasDeclaredType: true,
|
@@ -1829,7 +1843,7 @@ function narrowTypeForCallable(evaluator, type, isPositiveTest, errorNode, allow
|
|
1829
1843
|
types_1.FunctionType.addParameter(callMethod, selfParam);
|
1830
1844
|
types_1.FunctionType.addDefaultParameters(callMethod);
|
1831
1845
|
callMethod.details.declaredReturnType = types_1.UnknownType.create();
|
1832
|
-
newClassType.details.fields.set('__call__', symbol_1.Symbol.createWithType(4 /* ClassMember */, callMethod));
|
1846
|
+
newClassType.details.fields.set('__call__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, callMethod));
|
1833
1847
|
return types_1.ClassType.cloneAsInstance(newClassType);
|
1834
1848
|
}
|
1835
1849
|
return undefined;
|