@zzzen/pyright-internal 1.2.0-dev.20231119 → 1.2.0-dev.20231203
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 +201 -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.d.ts +4 -1
- package/dist/analyzer/checker.js +403 -248
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +1 -1
- package/dist/analyzer/codeFlowEngine.js +33 -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/commentUtils.js +7 -0
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +51 -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 +25 -26
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +124 -109
- 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 +94 -92
- 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 +41 -27
- 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 +1347 -1270
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -2
- package/dist/analyzer/typeEvaluatorTypes.js +4 -2
- 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.d.ts +1 -1
- package/dist/analyzer/typeUtils.js +139 -135
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +2 -0
- package/dist/analyzer/typeVarContext.js +36 -9
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.js +10 -10
- package/dist/analyzer/typedDicts.js +76 -102
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +18 -18
- package/dist/analyzer/types.js +186 -191
- 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 +6 -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.d.ts +0 -1
- package/dist/commands/commands.js +1 -2
- 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 +2 -1
- package/dist/common/configOptions.js +102 -10
- 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.d.ts +0 -4
- 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 +5 -19
- 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.d.ts +1 -2
- package/dist/languageService/quickActions.js +1 -77
- 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 +19 -18
- package/dist/localization/localize.js +11 -8
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +0 -7
- package/dist/localization/package.nls.de.json +0 -7
- package/dist/localization/package.nls.en-us.json +11 -8
- package/dist/localization/package.nls.es.json +2 -9
- package/dist/localization/package.nls.fr.json +0 -7
- package/dist/localization/package.nls.it.json +0 -7
- package/dist/localization/package.nls.ja.json +0 -7
- package/dist/localization/package.nls.ko.json +0 -7
- package/dist/localization/package.nls.pl.json +0 -7
- package/dist/localization/package.nls.pt-br.json +0 -7
- package/dist/localization/package.nls.qps-ploc.json +0 -7
- package/dist/localization/package.nls.ru.json +0 -7
- package/dist/localization/package.nls.tr.json +0 -7
- package/dist/localization/package.nls.zh-cn.json +0 -7
- package/dist/localization/package.nls.zh-tw.json +0 -7
- 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 +2 -2
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +2 -1
- package/dist/readonlyAugmentedFileSystem.js +15 -5
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +5 -1
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +13 -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/fourslash/fourslash.d.ts +1 -2
- 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.d.ts +1 -2
- package/dist/tests/harness/fourslash/testState.Consts.js +6 -3
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +18 -14
- 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/pyrightFileSystem.test.js +48 -1
- package/dist/tests/pyrightFileSystem.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 +22 -7
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +14 -6
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +23 -12
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +16 -4
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +13 -5
- 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
@@ -10,7 +10,11 @@
|
|
10
10
|
*/
|
11
11
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
12
12
|
if (k2 === undefined) k2 = k;
|
13
|
-
Object.
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
16
|
+
}
|
17
|
+
Object.defineProperty(o, k2, desc);
|
14
18
|
}) : (function(o, m, k, k2) {
|
15
19
|
if (k2 === undefined) k2 = k;
|
16
20
|
o[k2] = m[k];
|
@@ -51,13 +55,13 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
51
55
|
var _a;
|
52
56
|
(0, debug_1.assert)(types_1.ClassType.isDataClass(classType));
|
53
57
|
const classTypeVar = (0, typeUtils_1.synthesizeTypeVarForSelfCls)(classType, /* isClsParam */ true);
|
54
|
-
const newType = types_1.FunctionType.createSynthesizedInstance('__new__', 1 /* ConstructorMethod */);
|
58
|
+
const newType = types_1.FunctionType.createSynthesizedInstance('__new__', 1 /* FunctionTypeFlags.ConstructorMethod */);
|
55
59
|
const initType = types_1.FunctionType.createSynthesizedInstance('__init__');
|
56
60
|
// Override `__new__` because some dataclasses (such as those that are
|
57
61
|
// created by subclassing from NamedTuple) may have their own custom
|
58
62
|
// __new__ that requires overriding.
|
59
63
|
types_1.FunctionType.addParameter(newType, {
|
60
|
-
category: 0 /* Simple */,
|
64
|
+
category: 0 /* ParameterCategory.Simple */,
|
61
65
|
name: 'cls',
|
62
66
|
type: classTypeVar,
|
63
67
|
hasDeclaredType: true,
|
@@ -65,7 +69,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
65
69
|
types_1.FunctionType.addDefaultParameters(newType);
|
66
70
|
newType.details.declaredReturnType = (0, typeUtils_1.convertToInstance)(classTypeVar);
|
67
71
|
const selfParam = {
|
68
|
-
category: 0 /* Simple */,
|
72
|
+
category: 0 /* ParameterCategory.Simple */,
|
69
73
|
name: 'self',
|
70
74
|
type: (0, typeUtils_1.synthesizeTypeVarForSelfCls)(classType, /* isClsParam */ false),
|
71
75
|
hasDeclaredType: true,
|
@@ -87,7 +91,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
87
91
|
const localEntryTypeEvaluator = [];
|
88
92
|
let sawKeywordOnlySeparator = false;
|
89
93
|
classType.details.fields.forEach((symbol, name) => {
|
90
|
-
var _a, _b, _c;
|
94
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
91
95
|
if (symbol.isIgnoredForProtocolMatch()) {
|
92
96
|
return;
|
93
97
|
}
|
@@ -98,11 +102,11 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
98
102
|
}
|
99
103
|
// Only variables (not functions, classes, etc.) are considered.
|
100
104
|
const classVarDecl = symbol.getTypedDeclarations().find((decl) => {
|
101
|
-
if (decl.type !== 1 /* Variable */) {
|
105
|
+
if (decl.type !== 1 /* DeclarationType.Variable */) {
|
102
106
|
return false;
|
103
107
|
}
|
104
108
|
const container = (0, parseTreeUtils_1.getEnclosingClassOrFunction)(decl.node);
|
105
|
-
if (!container || container.nodeType !== 10 /* Class */) {
|
109
|
+
if (!container || container.nodeType !== 10 /* ParseNodeType.Class */) {
|
106
110
|
return false;
|
107
111
|
}
|
108
112
|
return true;
|
@@ -110,11 +114,11 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
110
114
|
if (classVarDecl) {
|
111
115
|
let statement = classVarDecl.node;
|
112
116
|
while (statement) {
|
113
|
-
if (statement.nodeType === 3 /* Assignment */) {
|
117
|
+
if (statement.nodeType === 3 /* ParseNodeType.Assignment */) {
|
114
118
|
break;
|
115
119
|
}
|
116
|
-
if (statement.nodeType === 54 /* TypeAnnotation */) {
|
117
|
-
if (((_a = statement.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* Assignment */) {
|
120
|
+
if (statement.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
121
|
+
if (((_a = statement.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* ParseNodeType.Assignment */) {
|
118
122
|
statement = statement.parent;
|
119
123
|
}
|
120
124
|
break;
|
@@ -132,9 +136,9 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
132
136
|
let defaultValueExpression;
|
133
137
|
let includeInInit = true;
|
134
138
|
let converter;
|
135
|
-
if (statement.nodeType === 3 /* Assignment */) {
|
136
|
-
if (statement.leftExpression.nodeType === 54 /* TypeAnnotation */ &&
|
137
|
-
statement.leftExpression.valueExpression.nodeType === 38 /* Name */) {
|
139
|
+
if (statement.nodeType === 3 /* ParseNodeType.Assignment */) {
|
140
|
+
if (statement.leftExpression.nodeType === 54 /* ParseNodeType.TypeAnnotation */ &&
|
141
|
+
statement.leftExpression.valueExpression.nodeType === 38 /* ParseNodeType.Name */) {
|
138
142
|
variableNameNode = statement.leftExpression.valueExpression;
|
139
143
|
const assignmentStatement = statement;
|
140
144
|
variableTypeEvaluator = () => evaluator.getTypeOfAnnotation(assignmentStatement.leftExpression.typeAnnotation, {
|
@@ -147,62 +151,29 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
147
151
|
defaultValueExpression = statement.rightExpression;
|
148
152
|
// If the RHS of the assignment is assigning a field instance where the
|
149
153
|
// "init" parameter is set to false, do not include it in the init method.
|
150
|
-
if (statement.rightExpression.nodeType === 9 /* Call */) {
|
151
|
-
const callTypeResult = evaluator.getTypeOfExpression(statement.rightExpression.leftExpression, 16777218 /* CallBaseDefaults */);
|
154
|
+
if (statement.rightExpression.nodeType === 9 /* ParseNodeType.Call */) {
|
155
|
+
const callTypeResult = evaluator.getTypeOfExpression(statement.rightExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
|
152
156
|
const callType = callTypeResult.type;
|
153
157
|
if (isDataclassFieldConstructor(callType, ((_b = classType.details.dataClassBehaviors) === null || _b === void 0 ? void 0 : _b.fieldDescriptorNames) || [])) {
|
154
158
|
const initArg = statement.rightExpression.arguments.find((arg) => { var _a; return ((_a = arg.name) === null || _a === void 0 ? void 0 : _a.value) === 'init'; });
|
155
159
|
if (initArg && initArg.valueExpression) {
|
156
160
|
const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
|
157
|
-
|
158
|
-
|
159
|
-
includeInInit = false;
|
160
|
-
}
|
161
|
+
includeInInit =
|
162
|
+
(_c = (0, staticExpressions_1.evaluateStaticBoolExpression)(initArg.valueExpression, fileInfo.executionEnvironment, fileInfo.definedConstants)) !== null && _c !== void 0 ? _c : includeInInit;
|
161
163
|
}
|
162
164
|
else {
|
163
|
-
|
164
|
-
|
165
|
-
let callTarget;
|
166
|
-
if ((0, types_1.isFunction)(callType)) {
|
167
|
-
callTarget = callType;
|
168
|
-
}
|
169
|
-
else if ((0, types_1.isOverloadedFunction)(callType)) {
|
170
|
-
callTarget = evaluator.getBestOverloadForArguments(statement.rightExpression, { type: callType, isIncomplete: callTypeResult.isIncomplete }, statement.rightExpression.arguments);
|
171
|
-
}
|
172
|
-
else if ((0, types_1.isInstantiableClass)(callType)) {
|
173
|
-
const initMethodResult = (0, constructors_1.getBoundInitMethod)(evaluator, node.name, callType);
|
174
|
-
if (initMethodResult) {
|
175
|
-
if ((0, types_1.isFunction)(initMethodResult.type)) {
|
176
|
-
callTarget = initMethodResult.type;
|
177
|
-
}
|
178
|
-
else if ((0, types_1.isOverloadedFunction)(initMethodResult.type)) {
|
179
|
-
callTarget = evaluator.getBestOverloadForArguments(statement.rightExpression, { type: initMethodResult.type }, statement.rightExpression.arguments);
|
180
|
-
}
|
181
|
-
}
|
182
|
-
}
|
183
|
-
if (callTarget) {
|
184
|
-
const initParam = callTarget.details.parameters.find((p) => p.name === 'init');
|
185
|
-
if (initParam && initParam.defaultValueExpression && initParam.hasDeclaredType) {
|
186
|
-
if ((0, types_1.isClass)(initParam.type) &&
|
187
|
-
types_1.ClassType.isBuiltIn(initParam.type, 'bool') &&
|
188
|
-
(0, typeUtils_1.isLiteralType)(initParam.type)) {
|
189
|
-
if (initParam.type.literalValue === false) {
|
190
|
-
includeInInit = false;
|
191
|
-
}
|
192
|
-
}
|
193
|
-
}
|
194
|
-
}
|
165
|
+
includeInInit =
|
166
|
+
(_d = getDefaultArgValueForFieldSpecifier(evaluator, statement.rightExpression, callTypeResult, 'init')) !== null && _d !== void 0 ? _d : includeInInit;
|
195
167
|
}
|
196
168
|
const kwOnlyArg = statement.rightExpression.arguments.find((arg) => { var _a; return ((_a = arg.name) === null || _a === void 0 ? void 0 : _a.value) === 'kw_only'; });
|
197
169
|
if (kwOnlyArg && kwOnlyArg.valueExpression) {
|
198
170
|
const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
}
|
171
|
+
isKeywordOnly =
|
172
|
+
(_e = (0, staticExpressions_1.evaluateStaticBoolExpression)(kwOnlyArg.valueExpression, fileInfo.executionEnvironment, fileInfo.definedConstants)) !== null && _e !== void 0 ? _e : isKeywordOnly;
|
173
|
+
}
|
174
|
+
else {
|
175
|
+
isKeywordOnly =
|
176
|
+
(_f = getDefaultArgValueForFieldSpecifier(evaluator, statement.rightExpression, callTypeResult, 'kw_only')) !== null && _f !== void 0 ? _f : isKeywordOnly;
|
206
177
|
}
|
207
178
|
const defaultArg = statement.rightExpression.arguments.find((arg) => {
|
208
179
|
var _a, _b, _c;
|
@@ -230,8 +201,8 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
230
201
|
}
|
231
202
|
}
|
232
203
|
}
|
233
|
-
else if (statement.nodeType === 54 /* TypeAnnotation */) {
|
234
|
-
if (statement.valueExpression.nodeType === 38 /* Name */) {
|
204
|
+
else if (statement.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
205
|
+
if (statement.valueExpression.nodeType === 38 /* ParseNodeType.Name */) {
|
235
206
|
variableNameNode = statement.valueExpression;
|
236
207
|
const annotationStatement = statement;
|
237
208
|
variableTypeEvaluator = () => evaluator.getTypeOfAnnotation(annotationStatement.typeAnnotation, {
|
@@ -255,7 +226,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
255
226
|
// Don't include class vars. PEP 557 indicates that they shouldn't
|
256
227
|
// be considered data class entries.
|
257
228
|
const variableSymbol = classType.details.fields.get(variableName);
|
258
|
-
const isFinal = variableSymbol === null || variableSymbol === void 0 ? void 0 : variableSymbol.getDeclarations().some((decl) => decl.type === 1 /* Variable */ && decl.isFinal);
|
229
|
+
const isFinal = variableSymbol === null || variableSymbol === void 0 ? void 0 : variableSymbol.getDeclarations().some((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isFinal);
|
259
230
|
if ((variableSymbol === null || variableSymbol === void 0 ? void 0 : variableSymbol.isClassVar()) && !isFinal) {
|
260
231
|
// If an ancestor class declared an instance variable but this dataclass
|
261
232
|
// declares a ClassVar, delete the older one from the full data class entries.
|
@@ -343,18 +314,18 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
343
314
|
return;
|
344
315
|
}
|
345
316
|
const lastDecl = declarations[declarations.length - 1];
|
346
|
-
if (lastDecl.type !== 1 /* Variable */) {
|
317
|
+
if (lastDecl.type !== 1 /* DeclarationType.Variable */) {
|
347
318
|
return;
|
348
319
|
}
|
349
320
|
const statement = lastDecl.node.parent;
|
350
|
-
if (!statement || statement.nodeType !== 3 /* Assignment */) {
|
321
|
+
if (!statement || statement.nodeType !== 3 /* ParseNodeType.Assignment */) {
|
351
322
|
return;
|
352
323
|
}
|
353
324
|
// If the RHS of the assignment is assigning a field instance where the
|
354
325
|
// "init" parameter is set to false, do not include it in the init method.
|
355
|
-
if (statement.rightExpression.nodeType === 9 /* Call */) {
|
356
|
-
const callType = evaluator.getTypeOfExpression(statement.rightExpression.leftExpression, 16777218 /* CallBaseDefaults */).type;
|
357
|
-
if (isDataclassFieldConstructor(callType, ((
|
326
|
+
if (statement.rightExpression.nodeType === 9 /* ParseNodeType.Call */) {
|
327
|
+
const callType = evaluator.getTypeOfExpression(statement.rightExpression.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */).type;
|
328
|
+
if (isDataclassFieldConstructor(callType, ((_g = classType.details.dataClassBehaviors) === null || _g === void 0 ? void 0 : _g.fieldDescriptorNames) || [])) {
|
358
329
|
evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.dataClassFieldWithoutAnnotation(), statement.rightExpression);
|
359
330
|
}
|
360
331
|
}
|
@@ -396,7 +367,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
396
367
|
evaluator.addError(localize_1.Localizer.Diagnostic.dataClassFieldWithPrivateName(), entry.nameNode);
|
397
368
|
}
|
398
369
|
const functionParam = {
|
399
|
-
category: 0 /* Simple */,
|
370
|
+
category: 0 /* ParameterCategory.Simple */,
|
400
371
|
name: effectiveName,
|
401
372
|
hasDefault: entry.hasDefault,
|
402
373
|
defaultValueExpression: entry.defaultValueExpression,
|
@@ -413,7 +384,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
413
384
|
});
|
414
385
|
if (keywordOnlyParams.length > 0) {
|
415
386
|
types_1.FunctionType.addParameter(initType, {
|
416
|
-
category: 1 /* ArgsList */,
|
387
|
+
category: 1 /* ParameterCategory.ArgsList */,
|
417
388
|
type: types_1.AnyType.create(),
|
418
389
|
});
|
419
390
|
keywordOnlyParams.forEach((param) => {
|
@@ -421,8 +392,8 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
421
392
|
});
|
422
393
|
}
|
423
394
|
}
|
424
|
-
symbolTable.set('__init__', symbol_1.Symbol.createWithType(4 /* ClassMember */, initType));
|
425
|
-
symbolTable.set('__new__', symbol_1.Symbol.createWithType(4 /* ClassMember */, newType));
|
395
|
+
symbolTable.set('__init__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, initType));
|
396
|
+
symbolTable.set('__new__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, newType));
|
426
397
|
}
|
427
398
|
// Synthesize the __match_args__ class variable if it doesn't exist.
|
428
399
|
const strType = evaluator.getBuiltInType(node, 'str');
|
@@ -443,13 +414,13 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
443
414
|
return { type: types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneWithLiteral(strType, name)), isUnbounded: false };
|
444
415
|
});
|
445
416
|
const matchArgsType = types_1.ClassType.cloneAsInstance((0, typeUtils_1.specializeTupleClass)(tupleClassType, literalTypes));
|
446
|
-
symbolTable.set('__match_args__', symbol_1.Symbol.createWithType(4 /* ClassMember */, matchArgsType));
|
417
|
+
symbolTable.set('__match_args__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, matchArgsType));
|
447
418
|
}
|
448
419
|
const synthesizeComparisonMethod = (operator, paramType) => {
|
449
420
|
const operatorMethod = types_1.FunctionType.createSynthesizedInstance(operator);
|
450
421
|
types_1.FunctionType.addParameter(operatorMethod, selfParam);
|
451
422
|
types_1.FunctionType.addParameter(operatorMethod, {
|
452
|
-
category: 0 /* Simple */,
|
423
|
+
category: 0 /* ParameterCategory.Simple */,
|
453
424
|
name: 'other',
|
454
425
|
type: paramType,
|
455
426
|
hasDeclaredType: true,
|
@@ -457,7 +428,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
457
428
|
operatorMethod.details.declaredReturnType = evaluator.getBuiltInObject(node, 'bool');
|
458
429
|
// If a method of this name already exists, don't override it.
|
459
430
|
if (!symbolTable.get(operator)) {
|
460
|
-
symbolTable.set(operator, symbol_1.Symbol.createWithType(4 /* ClassMember */, operatorMethod));
|
431
|
+
symbolTable.set(operator, symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, operatorMethod));
|
461
432
|
}
|
462
433
|
};
|
463
434
|
// Synthesize comparison operators.
|
@@ -484,17 +455,17 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
484
455
|
const hashMethod = types_1.FunctionType.createSynthesizedInstance('__hash__');
|
485
456
|
types_1.FunctionType.addParameter(hashMethod, selfParam);
|
486
457
|
hashMethod.details.declaredReturnType = evaluator.getBuiltInObject(node, 'int');
|
487
|
-
symbolTable.set('__hash__', symbol_1.Symbol.createWithType(4 /* ClassMember */ | 4096 /* IgnoredForOverrideChecks */, hashMethod));
|
458
|
+
symbolTable.set('__hash__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */ | 4096 /* SymbolFlags.IgnoredForOverrideChecks */, hashMethod));
|
488
459
|
}
|
489
460
|
else if (synthesizeHashNone && !skipSynthesizeHash) {
|
490
|
-
symbolTable.set('__hash__', symbol_1.Symbol.createWithType(4 /* ClassMember */ | 4096 /* IgnoredForOverrideChecks */, evaluator.getNoneType()));
|
461
|
+
symbolTable.set('__hash__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */ | 4096 /* SymbolFlags.IgnoredForOverrideChecks */, evaluator.getNoneType()));
|
491
462
|
}
|
492
463
|
let dictType = evaluator.getBuiltInType(node, 'dict');
|
493
464
|
if ((0, types_1.isInstantiableClass)(dictType)) {
|
494
465
|
dictType = types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneForSpecialization(dictType, [evaluator.getBuiltInObject(node, 'str'), types_1.AnyType.create()],
|
495
466
|
/* isTypeArgumentExplicit */ true));
|
496
467
|
}
|
497
|
-
symbolTable.set('__dataclass_fields__', symbol_1.Symbol.createWithType(4 /* ClassMember */ | 128 /* ClassVar */, dictType));
|
468
|
+
symbolTable.set('__dataclass_fields__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */ | 128 /* SymbolFlags.ClassVar */, dictType));
|
498
469
|
if (types_1.ClassType.isGeneratedDataClassSlots(classType) && classType.details.localSlotsNames === undefined) {
|
499
470
|
classType.details.localSlotsNames = localDataClassEntries.map((entry) => entry.name);
|
500
471
|
}
|
@@ -505,7 +476,7 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
505
476
|
iterableType = types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneForSpecialization(iterableType, [evaluator.getBuiltInObject(node, 'str')],
|
506
477
|
/* isTypeArgumentExplicit */ true));
|
507
478
|
}
|
508
|
-
symbolTable.set('__slots__', symbol_1.Symbol.createWithType(4 /* ClassMember */ | 128 /* ClassVar */, iterableType));
|
479
|
+
symbolTable.set('__slots__', symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */ | 128 /* SymbolFlags.ClassVar */, iterableType));
|
509
480
|
}
|
510
481
|
// If this dataclass derived from a NamedTuple, update the NamedTuple with
|
511
482
|
// the specialized entry types.
|
@@ -516,6 +487,50 @@ function synthesizeDataClassMethods(evaluator, node, classType, skipSynthesizeIn
|
|
516
487
|
}
|
517
488
|
}
|
518
489
|
exports.synthesizeDataClassMethods = synthesizeDataClassMethods;
|
490
|
+
// If a field specifier is used to define a field, it may define a default
|
491
|
+
// argument value (either True or False) for a supported keyword parameter.
|
492
|
+
// This function extracts that default value if present and returns it. If
|
493
|
+
// it's not present, it returns undefined.
|
494
|
+
function getDefaultArgValueForFieldSpecifier(evaluator, callNode, callTypeResult, paramName) {
|
495
|
+
const callType = callTypeResult.type;
|
496
|
+
let callTarget;
|
497
|
+
if ((0, types_1.isFunction)(callType)) {
|
498
|
+
callTarget = callType;
|
499
|
+
}
|
500
|
+
else if ((0, types_1.isOverloadedFunction)(callType)) {
|
501
|
+
callTarget = evaluator.getBestOverloadForArguments(callNode, { type: callType, isIncomplete: callTypeResult.isIncomplete }, callNode.arguments);
|
502
|
+
}
|
503
|
+
else if ((0, types_1.isInstantiableClass)(callType)) {
|
504
|
+
const initMethodResult = (0, constructors_1.getBoundInitMethod)(evaluator, callNode, callType);
|
505
|
+
if (initMethodResult) {
|
506
|
+
if ((0, types_1.isFunction)(initMethodResult.type)) {
|
507
|
+
callTarget = initMethodResult.type;
|
508
|
+
}
|
509
|
+
else if ((0, types_1.isOverloadedFunction)(initMethodResult.type)) {
|
510
|
+
callTarget = evaluator.getBestOverloadForArguments(callNode, { type: initMethodResult.type }, callNode.arguments);
|
511
|
+
}
|
512
|
+
}
|
513
|
+
}
|
514
|
+
if (callTarget) {
|
515
|
+
const initParam = callTarget.details.parameters.find((p) => p.name === paramName);
|
516
|
+
if (initParam) {
|
517
|
+
// Is the parameter type a literal bool?
|
518
|
+
if (initParam.hasDeclaredType &&
|
519
|
+
(0, types_1.isClass)(initParam.type) &&
|
520
|
+
typeof initParam.type.literalValue === 'boolean') {
|
521
|
+
return initParam.type.literalValue;
|
522
|
+
}
|
523
|
+
// Is the default argument value a literal bool?
|
524
|
+
if (initParam.defaultValueExpression &&
|
525
|
+
initParam.defaultType &&
|
526
|
+
(0, types_1.isClass)(initParam.defaultType) &&
|
527
|
+
typeof initParam.defaultType.literalValue === 'boolean') {
|
528
|
+
return initParam.defaultType.literalValue;
|
529
|
+
}
|
530
|
+
}
|
531
|
+
}
|
532
|
+
return undefined;
|
533
|
+
}
|
519
534
|
// Validates converter and, if valid, returns its input type. If invalid,
|
520
535
|
// fieldType is returned.
|
521
536
|
function getConverterInputType(evaluator, converterNode, fieldType, fieldName) {
|
@@ -532,13 +547,13 @@ function getConverterInputType(evaluator, converterNode, fieldType, fieldName) {
|
|
532
547
|
targetFunction.details.typeVarScopeId = typeVar.scopeId;
|
533
548
|
targetFunction.details.declaredReturnType = fieldType;
|
534
549
|
types_1.FunctionType.addParameter(targetFunction, {
|
535
|
-
category: 0 /* Simple */,
|
550
|
+
category: 0 /* ParameterCategory.Simple */,
|
536
551
|
name: '__input',
|
537
552
|
type: typeVar,
|
538
553
|
hasDeclaredType: true,
|
539
554
|
});
|
540
555
|
types_1.FunctionType.addParameter(targetFunction, {
|
541
|
-
category: 0 /* Simple */,
|
556
|
+
category: 0 /* ParameterCategory.Simple */,
|
542
557
|
name: '',
|
543
558
|
type: types_1.UnknownType.create(),
|
544
559
|
});
|
@@ -597,7 +612,7 @@ function getDescriptorForConverterField(evaluator, dataclassNode, converterNode,
|
|
597
612
|
const fileInfo = (0, analyzerNodeInfo_1.getFileInfo)(dataclassNode);
|
598
613
|
const typeMetaclass = evaluator.getBuiltInType(dataclassNode, 'type');
|
599
614
|
const descriptorName = `__converterDescriptor_${fieldName}`;
|
600
|
-
const descriptorClass = types_1.ClassType.createInstantiable(descriptorName, (0, parseTreeUtils_1.getClassFullName)(converterNode, fileInfo.moduleName, descriptorName), fileInfo.moduleName, fileInfo.filePath, 0 /* None */, (0, parseTreeUtils_1.getTypeSourceId)(converterNode),
|
615
|
+
const descriptorClass = types_1.ClassType.createInstantiable(descriptorName, (0, parseTreeUtils_1.getClassFullName)(converterNode, fileInfo.moduleName, descriptorName), fileInfo.moduleName, fileInfo.filePath, 0 /* ClassTypeFlags.None */, (0, parseTreeUtils_1.getTypeSourceId)(converterNode),
|
601
616
|
/* declaredMetaclass */ undefined, (0, types_1.isInstantiableClass)(typeMetaclass) ? typeMetaclass : types_1.UnknownType.create());
|
602
617
|
descriptorClass.details.baseClasses.push(evaluator.getBuiltInType(dataclassNode, 'object'));
|
603
618
|
(0, typeUtils_1.computeMroLinearization)(descriptorClass);
|
@@ -605,55 +620,55 @@ function getDescriptorForConverterField(evaluator, dataclassNode, converterNode,
|
|
605
620
|
const selfType = (0, typeUtils_1.synthesizeTypeVarForSelfCls)(descriptorClass, /* isClsParam */ false);
|
606
621
|
const setFunction = types_1.FunctionType.createSynthesizedInstance('__set__');
|
607
622
|
types_1.FunctionType.addParameter(setFunction, {
|
608
|
-
category: 0 /* Simple */,
|
623
|
+
category: 0 /* ParameterCategory.Simple */,
|
609
624
|
name: 'self',
|
610
625
|
type: selfType,
|
611
626
|
hasDeclaredType: true,
|
612
627
|
});
|
613
628
|
types_1.FunctionType.addParameter(setFunction, {
|
614
|
-
category: 0 /* Simple */,
|
629
|
+
category: 0 /* ParameterCategory.Simple */,
|
615
630
|
name: 'obj',
|
616
631
|
type: types_1.AnyType.create(),
|
617
632
|
hasDeclaredType: true,
|
618
633
|
});
|
619
634
|
types_1.FunctionType.addParameter(setFunction, {
|
620
|
-
category: 0 /* Simple */,
|
635
|
+
category: 0 /* ParameterCategory.Simple */,
|
621
636
|
name: 'value',
|
622
637
|
type: setType,
|
623
638
|
hasDeclaredType: true,
|
624
639
|
});
|
625
640
|
setFunction.details.declaredReturnType = evaluator.getNoneType();
|
626
|
-
const setSymbol = symbol_1.Symbol.createWithType(4 /* ClassMember */, setFunction);
|
641
|
+
const setSymbol = symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, setFunction);
|
627
642
|
fields.set('__set__', setSymbol);
|
628
643
|
const getFunction = types_1.FunctionType.createSynthesizedInstance('__get__');
|
629
644
|
types_1.FunctionType.addParameter(getFunction, {
|
630
|
-
category: 0 /* Simple */,
|
645
|
+
category: 0 /* ParameterCategory.Simple */,
|
631
646
|
name: 'self',
|
632
647
|
type: selfType,
|
633
648
|
hasDeclaredType: true,
|
634
649
|
});
|
635
650
|
types_1.FunctionType.addParameter(getFunction, {
|
636
|
-
category: 0 /* Simple */,
|
651
|
+
category: 0 /* ParameterCategory.Simple */,
|
637
652
|
name: 'obj',
|
638
653
|
type: types_1.AnyType.create(),
|
639
654
|
hasDeclaredType: true,
|
640
655
|
});
|
641
656
|
types_1.FunctionType.addParameter(getFunction, {
|
642
|
-
category: 0 /* Simple */,
|
657
|
+
category: 0 /* ParameterCategory.Simple */,
|
643
658
|
name: 'objtype',
|
644
659
|
type: types_1.AnyType.create(),
|
645
660
|
hasDeclaredType: true,
|
646
661
|
});
|
647
662
|
getFunction.details.declaredReturnType = getType;
|
648
|
-
const getSymbol = symbol_1.Symbol.createWithType(4 /* ClassMember */, getFunction);
|
663
|
+
const getSymbol = symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, getFunction);
|
649
664
|
fields.set('__get__', getSymbol);
|
650
|
-
return symbol_1.Symbol.createWithType(4 /* ClassMember */, types_1.ClassType.cloneAsInstance(descriptorClass));
|
665
|
+
return symbol_1.Symbol.createWithType(4 /* SymbolFlags.ClassMember */, types_1.ClassType.cloneAsInstance(descriptorClass));
|
651
666
|
}
|
652
667
|
// If the specified type is a descriptor — in particular, if it implements a
|
653
668
|
// __set__ method, this method transforms the type into the input parameter
|
654
669
|
// for the set method.
|
655
670
|
function transformDescriptorType(evaluator, type) {
|
656
|
-
if (!(0, types_1.isClassInstance)(type)) {
|
671
|
+
if (!(0, types_1.isClassInstance)(type) || (0, typeUtils_1.isMetaclassInstance)(type)) {
|
657
672
|
return type;
|
658
673
|
}
|
659
674
|
const setMethodType = evaluator.getBoundMagicMethod(type, '__set__');
|
@@ -732,7 +747,7 @@ function validateDataClassTransformDecorator(evaluator, node) {
|
|
732
747
|
const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
|
733
748
|
// Parse the arguments to the call.
|
734
749
|
node.arguments.forEach((arg) => {
|
735
|
-
if (!arg.name || arg.argumentCategory !== 0 /* Simple */) {
|
750
|
+
if (!arg.name || arg.argumentCategory !== 0 /* ArgumentCategory.Simple */) {
|
736
751
|
evaluator.addError(localize_1.Localizer.Diagnostic.dataClassTransformPositionalParam(), arg);
|
737
752
|
return;
|
738
753
|
}
|
@@ -853,28 +868,28 @@ function applyDataClassBehaviorOverrideValue(evaluator, errorNode, classType, ar
|
|
853
868
|
switch (argName) {
|
854
869
|
case 'order':
|
855
870
|
if (argValue === true) {
|
856
|
-
classType.details.flags |= 64 /* SynthesizedDataClassOrder */;
|
871
|
+
classType.details.flags |= 64 /* ClassTypeFlags.SynthesizedDataClassOrder */;
|
857
872
|
}
|
858
873
|
else if (argValue === false) {
|
859
|
-
classType.details.flags &= ~64 /* SynthesizedDataClassOrder */;
|
874
|
+
classType.details.flags &= ~64 /* ClassTypeFlags.SynthesizedDataClassOrder */;
|
860
875
|
}
|
861
876
|
break;
|
862
877
|
case 'kw_only':
|
863
878
|
if (argValue === false) {
|
864
|
-
classType.details.flags &= ~2097152 /* DataClassKeywordOnlyParams */;
|
879
|
+
classType.details.flags &= ~2097152 /* ClassTypeFlags.DataClassKeywordOnlyParams */;
|
865
880
|
}
|
866
881
|
else if (argValue === true) {
|
867
|
-
classType.details.flags |= 2097152 /* DataClassKeywordOnlyParams */;
|
882
|
+
classType.details.flags |= 2097152 /* ClassTypeFlags.DataClassKeywordOnlyParams */;
|
868
883
|
}
|
869
884
|
break;
|
870
885
|
case 'frozen': {
|
871
886
|
let hasUnfrozenBaseClass = false;
|
872
887
|
let hasFrozenBaseClass = false;
|
873
888
|
if (argValue === false) {
|
874
|
-
classType.details.flags &= ~8 /* FrozenDataClass */;
|
889
|
+
classType.details.flags &= ~8 /* ClassTypeFlags.FrozenDataClass */;
|
875
890
|
}
|
876
891
|
else if (argValue === true) {
|
877
|
-
classType.details.flags |= 8 /* FrozenDataClass */;
|
892
|
+
classType.details.flags |= 8 /* ClassTypeFlags.FrozenDataClass */;
|
878
893
|
}
|
879
894
|
classType.details.baseClasses.forEach((baseClass) => {
|
880
895
|
if ((0, types_1.isInstantiableClass)(baseClass) && types_1.ClassType.isDataClass(baseClass)) {
|
@@ -908,35 +923,35 @@ function applyDataClassBehaviorOverrideValue(evaluator, errorNode, classType, ar
|
|
908
923
|
}
|
909
924
|
case 'init':
|
910
925
|
if (argValue === false) {
|
911
|
-
classType.details.flags |= 16 /* SkipSynthesizedDataClassInit */;
|
926
|
+
classType.details.flags |= 16 /* ClassTypeFlags.SkipSynthesizedDataClassInit */;
|
912
927
|
}
|
913
928
|
else if (argValue === true) {
|
914
|
-
classType.details.flags &= ~16 /* SkipSynthesizedDataClassInit */;
|
929
|
+
classType.details.flags &= ~16 /* ClassTypeFlags.SkipSynthesizedDataClassInit */;
|
915
930
|
}
|
916
931
|
break;
|
917
932
|
case 'eq':
|
918
933
|
if (argValue === false) {
|
919
|
-
classType.details.flags |= 32 /* SkipSynthesizedDataClassEq */;
|
934
|
+
classType.details.flags |= 32 /* ClassTypeFlags.SkipSynthesizedDataClassEq */;
|
920
935
|
}
|
921
936
|
else if (argValue === true) {
|
922
|
-
classType.details.flags &= ~32 /* SkipSynthesizedDataClassEq */;
|
937
|
+
classType.details.flags &= ~32 /* ClassTypeFlags.SkipSynthesizedDataClassEq */;
|
923
938
|
}
|
924
939
|
break;
|
925
940
|
case 'slots':
|
926
941
|
if (argValue === true) {
|
927
|
-
classType.details.flags |= 33554432 /* GenerateDataClassSlots */;
|
942
|
+
classType.details.flags |= 33554432 /* ClassTypeFlags.GenerateDataClassSlots */;
|
928
943
|
if (classType.details.localSlotsNames) {
|
929
944
|
evaluator.addDiagnostic(AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.dataClassSlotsOverwrite(), errorNode);
|
930
945
|
}
|
931
946
|
}
|
932
947
|
else if (argValue === false) {
|
933
|
-
classType.details.flags &= ~33554432 /* GenerateDataClassSlots */;
|
948
|
+
classType.details.flags &= ~33554432 /* ClassTypeFlags.GenerateDataClassSlots */;
|
934
949
|
}
|
935
950
|
break;
|
936
951
|
case 'hash':
|
937
952
|
case 'unsafe_hash':
|
938
953
|
if (argValue === true) {
|
939
|
-
classType.details.flags |= 67108864 /* SynthesizeDataClassUnsafeHash */;
|
954
|
+
classType.details.flags |= 67108864 /* ClassTypeFlags.SynthesizeDataClassUnsafeHash */;
|
940
955
|
}
|
941
956
|
break;
|
942
957
|
}
|
@@ -960,18 +975,18 @@ function applyDataClassClassBehaviorOverrides(evaluator, errorNode, classType, a
|
|
960
975
|
exports.applyDataClassClassBehaviorOverrides = applyDataClassClassBehaviorOverrides;
|
961
976
|
function applyDataClassDefaultBehaviors(classType, defaultBehaviors) {
|
962
977
|
classType.details.dataClassBehaviors = defaultBehaviors;
|
963
|
-
classType.details.flags |= 4 /* DataClass */;
|
978
|
+
classType.details.flags |= 4 /* ClassTypeFlags.DataClass */;
|
964
979
|
if (defaultBehaviors.keywordOnlyParams) {
|
965
|
-
classType.details.flags |= 2097152 /* DataClassKeywordOnlyParams */;
|
980
|
+
classType.details.flags |= 2097152 /* ClassTypeFlags.DataClassKeywordOnlyParams */;
|
966
981
|
}
|
967
982
|
if (!defaultBehaviors.generateEq) {
|
968
|
-
classType.details.flags |= 32 /* SkipSynthesizedDataClassEq */;
|
983
|
+
classType.details.flags |= 32 /* ClassTypeFlags.SkipSynthesizedDataClassEq */;
|
969
984
|
}
|
970
985
|
if (defaultBehaviors.generateOrder) {
|
971
|
-
classType.details.flags |= 64 /* SynthesizedDataClassOrder */;
|
986
|
+
classType.details.flags |= 64 /* ClassTypeFlags.SynthesizedDataClassOrder */;
|
972
987
|
}
|
973
988
|
if (defaultBehaviors.frozen) {
|
974
|
-
classType.details.flags |= 8 /* FrozenDataClass */;
|
989
|
+
classType.details.flags |= 8 /* ClassTypeFlags.FrozenDataClass */;
|
975
990
|
}
|
976
991
|
}
|
977
992
|
exports.applyDataClassDefaultBehaviors = applyDataClassDefaultBehaviors;
|