@zzzen/pyright-internal 1.2.0-dev.20231112 → 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.d.ts +1 -0
- package/dist/analyzer/checker.js +286 -256
- 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 +48 -45
- 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 +33 -31
- 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 +44 -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/docStringConversion.js +1 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/docStringUtils.js +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 +27 -18
- 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 +71 -64
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +20 -17
- 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 +15 -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 +1272 -1176
- 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 +95 -67
- 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 +163 -123
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +1 -0
- package/dist/analyzer/typeVarContext.js +12 -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 +17 -12
- package/dist/analyzer/types.js +191 -181
- 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.d.ts +3 -3
- package/dist/languageServerBase.js +19 -19
- 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 +171 -173
- 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 +10 -12
- package/dist/localization/localize.js +8 -5
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +5 -8
- package/dist/localization/package.nls.de.json +5 -8
- package/dist/localization/package.nls.en-us.json +12 -9
- package/dist/localization/package.nls.es.json +5 -8
- package/dist/localization/package.nls.fr.json +5 -8
- package/dist/localization/package.nls.it.json +5 -8
- package/dist/localization/package.nls.ja.json +5 -8
- package/dist/localization/package.nls.ko.json +5 -8
- package/dist/localization/package.nls.pl.json +5 -8
- package/dist/localization/package.nls.pt-br.json +5 -8
- package/dist/localization/package.nls.qps-ploc.json +2 -5
- package/dist/localization/package.nls.ru.json +5 -8
- package/dist/localization/package.nls.tr.json +5 -8
- package/dist/localization/package.nls.zh-cn.json +5 -8
- package/dist/localization/package.nls.zh-tw.json +5 -8
- 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 +38 -18
- 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/config.test.js +7 -5
- package/dist/tests/config.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/docStringConversion.test.js +0 -22
- package/dist/tests/docStringConversion.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/completions.params.fourslash.js +11 -0
- package/dist/tests/fourslash/completions.params.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.docstring.split.fourslash.js +10 -0
- package/dist/tests/fourslash/hover.docstring.split.fourslash.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 +18 -2
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +19 -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 +11 -3
- 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
package/dist/analyzer/checker.js
CHANGED
@@ -14,7 +14,11 @@
|
|
14
14
|
*/
|
15
15
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
16
16
|
if (k2 === undefined) k2 = k;
|
17
|
-
Object.
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
20
|
+
}
|
21
|
+
Object.defineProperty(o, k2, desc);
|
18
22
|
}) : (function(o, m, k, k2) {
|
19
23
|
if (k2 === undefined) k2 = k;
|
20
24
|
o[k2] = m[k];
|
@@ -216,14 +220,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
216
220
|
// Report any unknown or missing parameter types.
|
217
221
|
node.parameters.forEach((param, index) => {
|
218
222
|
if (param.name) {
|
219
|
-
if (param.category === 0 /* Simple */ && index >= paramDetails.positionOnlyParamCount) {
|
223
|
+
if (param.category === 0 /* ParameterCategory.Simple */ && index >= paramDetails.positionOnlyParamCount) {
|
220
224
|
keywordNames.add(param.name.value);
|
221
225
|
}
|
222
226
|
// Determine whether this is a P.args parameter.
|
223
|
-
if (param.category === 1 /* ArgsList */) {
|
227
|
+
if (param.category === 1 /* ParameterCategory.ArgsList */) {
|
224
228
|
const annotationExpr = param.typeAnnotation || param.typeAnnotationComment;
|
225
229
|
if (annotationExpr &&
|
226
|
-
annotationExpr.nodeType === 35 /* MemberAccess */ &&
|
230
|
+
annotationExpr.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
|
227
231
|
annotationExpr.memberName.value === 'args') {
|
228
232
|
const baseType = this._evaluator.getType(annotationExpr.leftExpression);
|
229
233
|
if (baseType && (0, types_1.isTypeVar)(baseType) && baseType.details.isParamSpec) {
|
@@ -231,11 +235,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
231
235
|
}
|
232
236
|
}
|
233
237
|
}
|
234
|
-
else if (param.category === 2 /* KwargsDict */) {
|
238
|
+
else if (param.category === 2 /* ParameterCategory.KwargsDict */) {
|
235
239
|
sawParamSpecArgs = false;
|
236
240
|
}
|
237
241
|
}
|
238
|
-
if (param.name && param.category === 0 /* Simple */ && sawParamSpecArgs) {
|
242
|
+
if (param.name && param.category === 0 /* ParameterCategory.Simple */ && sawParamSpecArgs) {
|
239
243
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.namedParamAfterParamSpecArgs().format({ name: param.name.value }), param.name);
|
240
244
|
}
|
241
245
|
// Allow unknown and missing param types if the param is named '_'.
|
@@ -297,7 +301,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
297
301
|
// Check for invalid use of ParamSpec P.args and P.kwargs.
|
298
302
|
const paramSpecParams = functionTypeResult.functionType.details.parameters.filter((param) => {
|
299
303
|
if (param.typeAnnotation && (0, types_1.isTypeVar)(param.type) && (0, types_1.isParamSpec)(param.type)) {
|
300
|
-
if (param.category !== 0 /* Simple */ && param.name && param.type.paramSpecAccess) {
|
304
|
+
if (param.category !== 0 /* ParameterCategory.Simple */ && param.name && param.type.paramSpecAccess) {
|
301
305
|
return true;
|
302
306
|
}
|
303
307
|
}
|
@@ -335,7 +339,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
335
339
|
const exemptMethods = ['__init__', '__new__'];
|
336
340
|
if (containingClassNode &&
|
337
341
|
(0, types_1.isTypeVar)(paramType) &&
|
338
|
-
paramType.details.declaredVariance === 3 /* Covariant */ &&
|
342
|
+
paramType.details.declaredVariance === 3 /* Variance.Covariant */ &&
|
339
343
|
!paramType.details.isSynthesized &&
|
340
344
|
!exemptMethods.some((name) => name === functionTypeResult.functionType.details.name)) {
|
341
345
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.paramTypeCovariant(), annotationNode);
|
@@ -387,7 +391,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
387
391
|
// This signifies an incomplete stub file that obscures type errors.
|
388
392
|
if (this._fileInfo.isStubFile && node.name.value === '__getattr__') {
|
389
393
|
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
390
|
-
if ((scope === null || scope === void 0 ? void 0 : scope.type) === 3 /* Module */) {
|
394
|
+
if ((scope === null || scope === void 0 ? void 0 : scope.type) === 3 /* ScopeType.Module */) {
|
391
395
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompleteStub, diagnosticRules_1.DiagnosticRule.reportIncompleteStub, localize_1.Localizer.Diagnostic.stubUsesGetAttr(), node.name);
|
392
396
|
}
|
393
397
|
}
|
@@ -449,8 +453,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
449
453
|
this._validateStandardCollectionInstantiation(node);
|
450
454
|
if (this._fileInfo.diagnosticRuleSet.reportUnusedCallResult !== 'none' ||
|
451
455
|
this._fileInfo.diagnosticRuleSet.reportUnusedCoroutine !== 'none') {
|
452
|
-
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */) {
|
453
|
-
const isRevealTypeCall = node.leftExpression.nodeType === 38 /* Name */ && node.leftExpression.value === 'reveal_type';
|
456
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */) {
|
457
|
+
const isRevealTypeCall = node.leftExpression.nodeType === 38 /* ParseNodeType.Name */ && node.leftExpression.value === 'reveal_type';
|
454
458
|
const returnType = this._evaluator.getType(node);
|
455
459
|
if (!isRevealTypeCall && returnType && this._isTypeValidForUnusedValueTest(returnType)) {
|
456
460
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnusedCallResult, diagnosticRules_1.DiagnosticRule.reportUnusedCallResult, localize_1.Localizer.Diagnostic.unusedCallResult().format({
|
@@ -467,8 +471,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
467
471
|
visitAwait(node) {
|
468
472
|
var _a;
|
469
473
|
if (this._fileInfo.diagnosticRuleSet.reportUnusedCallResult !== 'none') {
|
470
|
-
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */ &&
|
471
|
-
node.expression.nodeType === 9 /* Call */) {
|
474
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */ &&
|
475
|
+
node.expression.nodeType === 9 /* ParseNodeType.Call */) {
|
472
476
|
const returnType = this._evaluator.getType(node);
|
473
477
|
if (returnType && this._isTypeValidForUnusedValueTest(returnType)) {
|
474
478
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnusedCallResult, diagnosticRules_1.DiagnosticRule.reportUnusedCallResult, localize_1.Localizer.Diagnostic.unusedCallResult().format({
|
@@ -545,7 +549,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
545
549
|
// at runtime in this case.
|
546
550
|
if ((enclosingFunctionNode === null || enclosingFunctionNode === void 0 ? void 0 : enclosingFunctionNode.isAsync) && node.returnExpression) {
|
547
551
|
const functionDecl = AnalyzerNodeInfo.getDeclaration(enclosingFunctionNode);
|
548
|
-
if ((functionDecl === null || functionDecl === void 0 ? void 0 : functionDecl.type) === 5 /* Function */ && functionDecl.isGenerator) {
|
552
|
+
if ((functionDecl === null || functionDecl === void 0 ? void 0 : functionDecl.type) === 5 /* DeclarationType.Function */ && functionDecl.isGenerator) {
|
549
553
|
this._evaluator.addError(localize_1.Localizer.Diagnostic.returnInAsyncGenerator(), node.returnExpression);
|
550
554
|
}
|
551
555
|
}
|
@@ -558,7 +562,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
558
562
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
559
563
|
let returnTypeMatches = false;
|
560
564
|
if (this._evaluator.assignType(declaredReturnType, returnTypeResult.type, diagAddendum, new typeVarContext_1.TypeVarContext(),
|
561
|
-
/* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
|
565
|
+
/* srcTypeVarContext */ undefined, 64 /* AssignTypeFlags.AllowBoolTypeGuard */)) {
|
562
566
|
returnTypeMatches = true;
|
563
567
|
}
|
564
568
|
else {
|
@@ -581,7 +585,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
581
585
|
const adjustedReturnType = (0, typeUtils_1.applySolvedTypeVars)(declaredReturnType, typeVarContext);
|
582
586
|
if (this._evaluator.assignType(adjustedReturnType, returnTypeResult.type, diagAddendum,
|
583
587
|
/* destTypeVarContext */ undefined,
|
584
|
-
/* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
|
588
|
+
/* srcTypeVarContext */ undefined, 64 /* AssignTypeFlags.AllowBoolTypeGuard */)) {
|
585
589
|
returnTypeMatches = true;
|
586
590
|
}
|
587
591
|
}
|
@@ -719,14 +723,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
719
723
|
}
|
720
724
|
}
|
721
725
|
// If this isn't a class or global scope, explicit type aliases are not allowed.
|
722
|
-
if (node.leftExpression.nodeType === 54 /* TypeAnnotation */) {
|
726
|
+
if (node.leftExpression.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
723
727
|
const annotationType = this._evaluator.getTypeOfAnnotation(node.leftExpression.typeAnnotation);
|
724
728
|
if ((0, types_1.isClassInstance)(annotationType) && types_1.ClassType.isBuiltIn(annotationType, 'TypeAlias')) {
|
725
729
|
const scope = (0, scopeUtils_1.getScopeForNode)(node);
|
726
730
|
if (scope) {
|
727
|
-
if (scope.type !== 2 /* Class */ &&
|
728
|
-
scope.type !== 3 /* Module */ &&
|
729
|
-
scope.type !== 4 /* Builtin */) {
|
731
|
+
if (scope.type !== 2 /* ScopeType.Class */ &&
|
732
|
+
scope.type !== 3 /* ScopeType.Module */ &&
|
733
|
+
scope.type !== 4 /* ScopeType.Builtin */) {
|
730
734
|
this._evaluator.addError(localize_1.Localizer.Diagnostic.typeAliasNotInModuleOrClass(), node.leftExpression.typeAnnotation);
|
731
735
|
}
|
732
736
|
}
|
@@ -756,7 +760,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
756
760
|
const tupleLength = subtype.tupleTypeArguments.length;
|
757
761
|
if (node.items.length === 1 &&
|
758
762
|
!node.trailingComma &&
|
759
|
-
node.items[0].argumentCategory === 0 /* Simple */ &&
|
763
|
+
node.items[0].argumentCategory === 0 /* ArgumentCategory.Simple */ &&
|
760
764
|
!node.items[0].name) {
|
761
765
|
const subscriptType = this._evaluator.getType(node.items[0].valueExpression);
|
762
766
|
if (subscriptType &&
|
@@ -779,23 +783,23 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
779
783
|
return true;
|
780
784
|
}
|
781
785
|
visitBinaryOperation(node) {
|
782
|
-
if (node.operator === 36 /* And */ || node.operator === 37 /* Or */) {
|
786
|
+
if (node.operator === 36 /* OperatorType.And */ || node.operator === 37 /* OperatorType.Or */) {
|
783
787
|
this._validateConditionalIsBool(node.leftExpression);
|
784
788
|
this._validateConditionalIsBool(node.rightExpression);
|
785
789
|
}
|
786
|
-
if (node.operator === 12 /* Equals */ || node.operator === 28 /* NotEquals */) {
|
790
|
+
if (node.operator === 12 /* OperatorType.Equals */ || node.operator === 28 /* OperatorType.NotEquals */) {
|
787
791
|
// Don't apply this rule if it's within an assert.
|
788
792
|
if (!ParseTreeUtils.isWithinAssertExpression(node)) {
|
789
793
|
this._validateComparisonTypes(node);
|
790
794
|
}
|
791
795
|
}
|
792
|
-
else if (node.operator === 39 /* Is */ || node.operator === 40 /* IsNot */) {
|
796
|
+
else if (node.operator === 39 /* OperatorType.Is */ || node.operator === 40 /* OperatorType.IsNot */) {
|
793
797
|
// Don't apply this rule if it's within an assert.
|
794
798
|
if (!ParseTreeUtils.isWithinAssertExpression(node)) {
|
795
799
|
this._validateComparisonTypesForIsOperator(node);
|
796
800
|
}
|
797
801
|
}
|
798
|
-
else if (node.operator === 41 /* In */ || node.operator === 42 /* NotIn */) {
|
802
|
+
else if (node.operator === 41 /* OperatorType.In */ || node.operator === 42 /* OperatorType.NotIn */) {
|
799
803
|
// Don't apply this rule if it's within an assert.
|
800
804
|
if (!ParseTreeUtils.isWithinAssertExpression(node)) {
|
801
805
|
this._validateContainmentTypes(node);
|
@@ -817,7 +821,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
817
821
|
return true;
|
818
822
|
}
|
819
823
|
visitUnaryOperation(node) {
|
820
|
-
if (node.operator === 38 /* Not */) {
|
824
|
+
if (node.operator === 38 /* OperatorType.Not */) {
|
821
825
|
this._validateConditionalIsBool(node.expression);
|
822
826
|
}
|
823
827
|
this._evaluator.getType(node);
|
@@ -837,22 +841,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
837
841
|
if (this._fileInfo.executionEnvironment.pythonVersion < pythonVersion_1.PythonVersion.V3_12) {
|
838
842
|
let curNode = node;
|
839
843
|
while (curNode) {
|
840
|
-
if (curNode.nodeType === 27 /* FormatString */) {
|
844
|
+
if (curNode.nodeType === 27 /* ParseNodeType.FormatString */) {
|
841
845
|
fStringContainers.push(curNode);
|
842
846
|
}
|
843
847
|
curNode = curNode.parent;
|
844
848
|
}
|
845
849
|
}
|
846
850
|
for (const stringNode of node.strings) {
|
847
|
-
const stringTokens = stringNode.nodeType === 49 /* String */ ? [stringNode.token] : stringNode.middleTokens;
|
851
|
+
const stringTokens = stringNode.nodeType === 49 /* ParseNodeType.String */ ? [stringNode.token] : stringNode.middleTokens;
|
848
852
|
stringTokens.forEach((token) => {
|
849
853
|
const unescapedResult = (0, stringTokenUtils_1.getUnescapedString)(token);
|
850
854
|
let start = token.start;
|
851
|
-
if (token.type === 5 /* String */) {
|
855
|
+
if (token.type === 5 /* TokenType.String */) {
|
852
856
|
start += token.prefixLength + token.quoteMarkLength;
|
853
857
|
}
|
854
858
|
unescapedResult.unescapeErrors.forEach((error) => {
|
855
|
-
if (error.errorType === 0 /* InvalidEscapeSequence */) {
|
859
|
+
if (error.errorType === 0 /* UnescapeErrorType.InvalidEscapeSequence */) {
|
856
860
|
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.Localizer.Diagnostic.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
|
857
861
|
}
|
858
862
|
});
|
@@ -867,7 +871,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
867
871
|
// Prior to Python 3.12, it was not allowed to nest strings that
|
868
872
|
// used the same quote scheme within an f-string.
|
869
873
|
if (fStringContainers.length > 0) {
|
870
|
-
const quoteTypeMask = 1 /* SingleQuote */ | 2 /* DoubleQuote */ | 4 /* Triplicate */;
|
874
|
+
const quoteTypeMask = 1 /* StringTokenFlags.SingleQuote */ | 2 /* StringTokenFlags.DoubleQuote */ | 4 /* StringTokenFlags.Triplicate */;
|
871
875
|
if (fStringContainers.some((fStringContainer) => (fStringContainer.token.flags & quoteTypeMask) === (stringNode.token.flags & quoteTypeMask))) {
|
872
876
|
this._evaluator.addError(localize_1.Localizer.Diagnostic.formatStringNestedQuote(), stringNode);
|
873
877
|
}
|
@@ -966,7 +970,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
966
970
|
const importInfo = AnalyzerNodeInfo.getImportInfo(node.module);
|
967
971
|
if (importInfo &&
|
968
972
|
importInfo.isImportFound &&
|
969
|
-
importInfo.importType !== 2 /* Local */ &&
|
973
|
+
importInfo.importType !== 2 /* ImportType.Local */ &&
|
970
974
|
!this._fileInfo.isStubFile) {
|
971
975
|
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportWildcardImportFromLibrary, diagnosticRules_1.DiagnosticRule.reportWildcardImportFromLibrary, localize_1.Localizer.Diagnostic.wildcardLibraryImport(), node.wildcardToken || node);
|
972
976
|
}
|
@@ -999,7 +1003,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
999
1003
|
break;
|
1000
1004
|
}
|
1001
1005
|
let isImportFromTyping = false;
|
1002
|
-
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */) {
|
1006
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */) {
|
1003
1007
|
if (node.parent.module.leadingDots === 0 && node.parent.module.nameParts.length === 1) {
|
1004
1008
|
if (node.parent.module.nameParts[0].value === 'typing') {
|
1005
1009
|
isImportFromTyping = true;
|
@@ -1074,7 +1078,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1074
1078
|
_addMissingModuleSourceDiagnosticIfNeeded(importResult, node) {
|
1075
1079
|
if (importResult.isNativeLib ||
|
1076
1080
|
!importResult.isStubFile ||
|
1077
|
-
importResult.importType === 0 /* BuiltIn */ ||
|
1081
|
+
importResult.importType === 0 /* ImportType.BuiltIn */ ||
|
1078
1082
|
!importResult.nonStubImportResult ||
|
1079
1083
|
importResult.nonStubImportResult.isImportFound) {
|
1080
1084
|
return;
|
@@ -1124,15 +1128,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1124
1128
|
}
|
1125
1129
|
}
|
1126
1130
|
_reportUnnecessaryConditionExpression(expression) {
|
1127
|
-
if (expression.nodeType === 7 /* BinaryOperation */) {
|
1128
|
-
if (expression.operator === 36 /* And */ || expression.operator === 37 /* Or */) {
|
1131
|
+
if (expression.nodeType === 7 /* ParseNodeType.BinaryOperation */) {
|
1132
|
+
if (expression.operator === 36 /* OperatorType.And */ || expression.operator === 37 /* OperatorType.Or */) {
|
1129
1133
|
this._reportUnnecessaryConditionExpression(expression.leftExpression);
|
1130
1134
|
this._reportUnnecessaryConditionExpression(expression.rightExpression);
|
1131
1135
|
}
|
1132
1136
|
return;
|
1133
1137
|
}
|
1134
|
-
else if (expression.nodeType === 55 /* UnaryOperation */) {
|
1135
|
-
if (expression.operator === 38 /* Not */) {
|
1138
|
+
else if (expression.nodeType === 55 /* ParseNodeType.UnaryOperation */) {
|
1139
|
+
if (expression.operator === 38 /* OperatorType.Not */) {
|
1136
1140
|
this._reportUnnecessaryConditionExpression(expression.expression);
|
1137
1141
|
}
|
1138
1142
|
return;
|
@@ -1162,30 +1166,30 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1162
1166
|
return;
|
1163
1167
|
}
|
1164
1168
|
const simpleExpressionTypes = [
|
1165
|
-
55 /* UnaryOperation */,
|
1166
|
-
7 /* BinaryOperation */,
|
1167
|
-
40 /* Number */,
|
1168
|
-
11 /* Constant */,
|
1169
|
-
38 /* Name */,
|
1170
|
-
52 /* Tuple */,
|
1169
|
+
55 /* ParseNodeType.UnaryOperation */,
|
1170
|
+
7 /* ParseNodeType.BinaryOperation */,
|
1171
|
+
40 /* ParseNodeType.Number */,
|
1172
|
+
11 /* ParseNodeType.Constant */,
|
1173
|
+
38 /* ParseNodeType.Name */,
|
1174
|
+
52 /* ParseNodeType.Tuple */,
|
1171
1175
|
];
|
1172
1176
|
let reportAsUnused = false;
|
1173
1177
|
if (simpleExpressionTypes.some((nodeType) => nodeType === node.nodeType)) {
|
1174
1178
|
reportAsUnused = true;
|
1175
1179
|
}
|
1176
|
-
else if (node.nodeType === 31 /* List */ ||
|
1177
|
-
node.nodeType === 45 /* Set */ ||
|
1178
|
-
node.nodeType === 15 /* Dictionary */) {
|
1180
|
+
else if (node.nodeType === 31 /* ParseNodeType.List */ ||
|
1181
|
+
node.nodeType === 45 /* ParseNodeType.Set */ ||
|
1182
|
+
node.nodeType === 15 /* ParseNodeType.Dictionary */) {
|
1179
1183
|
// Exclude comprehensions.
|
1180
|
-
if (!node.entries.some((entry) => entry.nodeType === 32 /* ListComprehension */)) {
|
1184
|
+
if (!node.entries.some((entry) => entry.nodeType === 32 /* ParseNodeType.ListComprehension */)) {
|
1181
1185
|
reportAsUnused = true;
|
1182
1186
|
}
|
1183
1187
|
}
|
1184
1188
|
if (reportAsUnused &&
|
1185
1189
|
this._fileInfo.ipythonMode === sourceFile_1.IPythonMode.CellDocs &&
|
1186
|
-
((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* StatementList */ &&
|
1190
|
+
((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 47 /* ParseNodeType.StatementList */ &&
|
1187
1191
|
node.parent.statements[node.parent.statements.length - 1] === node &&
|
1188
|
-
((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 36 /* Module */ &&
|
1192
|
+
((_b = node.parent.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 36 /* ParseNodeType.Module */ &&
|
1189
1193
|
node.parent.parent.statements[node.parent.parent.statements.length - 1] === node.parent) {
|
1190
1194
|
// Exclude an expression at the end of a notebook cell, as that is treated as
|
1191
1195
|
// the cell's value.
|
@@ -1262,7 +1266,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1262
1266
|
const narrowedType = (0, typeGuards_1.narrowTypeForContainerElementType)(this._evaluator, leftType, this._evaluator.makeTopLevelTypeVarsConcrete(elementType));
|
1263
1267
|
if ((0, types_1.isNever)(narrowedType)) {
|
1264
1268
|
const getMessage = () => {
|
1265
|
-
return node.operator === 41 /* In */
|
1269
|
+
return node.operator === 41 /* OperatorType.In */
|
1266
1270
|
? localize_1.Localizer.Diagnostic.containmentAlwaysFalse()
|
1267
1271
|
: localize_1.Localizer.Diagnostic.containmentAlwaysTrue();
|
1268
1272
|
};
|
@@ -1291,7 +1295,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1291
1295
|
}
|
1292
1296
|
});
|
1293
1297
|
const getMessage = () => {
|
1294
|
-
return node.operator === 39 /* Is */
|
1298
|
+
return node.operator === 39 /* OperatorType.Is */
|
1295
1299
|
? localize_1.Localizer.Diagnostic.comparisonAlwaysFalse()
|
1296
1300
|
: localize_1.Localizer.Diagnostic.comparisonAlwaysTrue();
|
1297
1301
|
};
|
@@ -1307,7 +1311,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1307
1311
|
_validateComparisonTypes(node) {
|
1308
1312
|
let rightExpression = node.rightExpression;
|
1309
1313
|
// Check for chained comparisons.
|
1310
|
-
if (rightExpression.nodeType === 7 /* BinaryOperation */ &&
|
1314
|
+
if (rightExpression.nodeType === 7 /* ParseNodeType.BinaryOperation */ &&
|
1311
1315
|
!rightExpression.parenthesized &&
|
1312
1316
|
ParseTreeUtils.operatorSupportsChaining(rightExpression.operator)) {
|
1313
1317
|
// Use the left side of the right expression for comparison purposes.
|
@@ -1322,7 +1326,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1322
1326
|
return;
|
1323
1327
|
}
|
1324
1328
|
const getMessage = () => {
|
1325
|
-
return node.operator === 12 /* Equals */
|
1329
|
+
return node.operator === 12 /* OperatorType.Equals */
|
1326
1330
|
? localize_1.Localizer.Diagnostic.comparisonAlwaysFalse()
|
1327
1331
|
: localize_1.Localizer.Diagnostic.comparisonAlwaysTrue();
|
1328
1332
|
};
|
@@ -1408,7 +1412,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1408
1412
|
// Does the class have an operator overload for eq?
|
1409
1413
|
const metaclass = leftType.details.effectiveMetaclass;
|
1410
1414
|
if (metaclass && (0, types_1.isClass)(metaclass)) {
|
1411
|
-
if ((0, typeUtils_1.lookUpClassMember)(metaclass, '__eq__', 4 /* SkipObjectBaseClass */)) {
|
1415
|
+
if ((0, typeUtils_1.lookUpClassMember)(metaclass, '__eq__', 4 /* MemberAccessFlags.SkipObjectBaseClass */)) {
|
1412
1416
|
return true;
|
1413
1417
|
}
|
1414
1418
|
}
|
@@ -1433,7 +1437,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1433
1437
|
}
|
1434
1438
|
}
|
1435
1439
|
// Does the class have an operator overload for eq?
|
1436
|
-
const eqMethod = (0, typeUtils_1.lookUpClassMember)(types_1.ClassType.cloneAsInstantiable(leftType), '__eq__', 4 /* SkipObjectBaseClass */);
|
1440
|
+
const eqMethod = (0, typeUtils_1.lookUpClassMember)(types_1.ClassType.cloneAsInstantiable(leftType), '__eq__', 4 /* MemberAccessFlags.SkipObjectBaseClass */);
|
1437
1441
|
if (eqMethod) {
|
1438
1442
|
// If this is a synthesized method for a dataclass, we can assume
|
1439
1443
|
// that other dataclass types will not be comparable.
|
@@ -1509,7 +1513,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1509
1513
|
let constructorClass;
|
1510
1514
|
if (types_1.FunctionType.isInstanceMethod(type) && node.name.value === '__init__') {
|
1511
1515
|
const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(node);
|
1512
|
-
if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
|
1516
|
+
if (containingClassNode && containingClassNode.nodeType === 10 /* ParseNodeType.Class */) {
|
1513
1517
|
const classType = this._evaluator.getTypeOfClass(containingClassNode);
|
1514
1518
|
if (classType && (0, types_1.isClass)(classType.classType)) {
|
1515
1519
|
constructorClass = classType.classType;
|
@@ -1523,14 +1527,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1523
1527
|
if (nameType && (0, types_1.isTypeVar)(nameType) && !nameType.details.isSynthesizedSelf) {
|
1524
1528
|
// Does this name refer to a TypeVar that is scoped to this function?
|
1525
1529
|
if (nameType.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
|
1526
|
-
// We exempt constrained TypeVars,
|
1530
|
+
// We exempt constrained TypeVars, TypeVars that are type arguments of
|
1527
1531
|
// other types, and ParamSpecs. There are legitimate uses for singleton
|
1528
1532
|
// instances in these particular cases.
|
1529
1533
|
let isExempt = nameType.details.constraints.length > 0 ||
|
1530
1534
|
!!nameType.details.defaultType ||
|
1531
|
-
(exemptBoundTypeVar &&
|
1532
|
-
nameType.details.boundType !== undefined &&
|
1533
|
-
subscriptIndex !== undefined) ||
|
1535
|
+
(exemptBoundTypeVar && subscriptIndex !== undefined) ||
|
1534
1536
|
(0, types_1.isParamSpec)(nameType);
|
1535
1537
|
if (!isExempt && baseExpression && subscriptIndex !== undefined) {
|
1536
1538
|
// Is this a type argument for a generic type alias? If so,
|
@@ -1544,10 +1546,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1544
1546
|
}
|
1545
1547
|
}
|
1546
1548
|
const existingEntry = localTypeVarUsage.get(nameType.details.name);
|
1547
|
-
const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 18 /* Ellipsis */;
|
1549
|
+
const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 18 /* ParseNodeType.Ellipsis */;
|
1548
1550
|
if (!existingEntry) {
|
1549
1551
|
localTypeVarUsage.set(nameType.details.name, {
|
1550
1552
|
nodes: [nameNode],
|
1553
|
+
typeVar: nameType,
|
1551
1554
|
paramTypeUsageCount: curParamNode !== undefined ? 1 : 0,
|
1552
1555
|
paramTypeWithEllipsisUsageCount: isParamTypeWithEllipsisUsage ? 1 : 0,
|
1553
1556
|
returnTypeUsageCount: curParamNode === undefined ? 1 : 0,
|
@@ -1575,10 +1578,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1575
1578
|
// this constructor method?
|
1576
1579
|
if (constructorClass && nameType.scopeId === constructorClass.details.typeVarScopeId) {
|
1577
1580
|
const existingEntry = classTypeVarUsage.get(nameType.details.name);
|
1578
|
-
const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 18 /* Ellipsis */;
|
1581
|
+
const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 18 /* ParseNodeType.Ellipsis */;
|
1579
1582
|
const isExempt = !!nameType.details.defaultType;
|
1580
1583
|
if (!existingEntry) {
|
1581
1584
|
classTypeVarUsage.set(nameType.details.name, {
|
1585
|
+
typeVar: nameType,
|
1582
1586
|
nodes: [nameNode],
|
1583
1587
|
paramTypeUsageCount: curParamNode !== undefined ? 1 : 0,
|
1584
1588
|
paramTypeWithEllipsisUsageCount: isParamTypeWithEllipsisUsage ? 1 : 0,
|
@@ -1622,9 +1626,23 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1622
1626
|
var _a;
|
1623
1627
|
// Report error for local type variable that appears only once.
|
1624
1628
|
if (usage.nodes.length === 1 && !usage.isExempt) {
|
1629
|
+
let altTypeText;
|
1630
|
+
if (usage.typeVar.details.isVariadic) {
|
1631
|
+
altTypeText = '"tuple[object, ...]"';
|
1632
|
+
}
|
1633
|
+
else if (usage.typeVar.details.boundType) {
|
1634
|
+
altTypeText = `"${this._evaluator.printType((0, typeUtils_1.convertToInstance)(usage.typeVar.details.boundType))}"`;
|
1635
|
+
}
|
1636
|
+
else {
|
1637
|
+
altTypeText = '"object"';
|
1638
|
+
}
|
1639
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
1640
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarUnnecessarySuggestion().format({
|
1641
|
+
type: altTypeText,
|
1642
|
+
}));
|
1625
1643
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportInvalidTypeVarUse, diagnosticRules_1.DiagnosticRule.reportInvalidTypeVarUse, localize_1.Localizer.Diagnostic.typeVarUsedOnlyOnce().format({
|
1626
1644
|
name: usage.nodes[0].value,
|
1627
|
-
}), usage.nodes[0]);
|
1645
|
+
}) + diag.getString(), usage.nodes[0]);
|
1628
1646
|
}
|
1629
1647
|
// Report error for local type variable that appears in return type
|
1630
1648
|
// (but not as a top-level TypeVar within a union) and appears only
|
@@ -1694,7 +1712,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1694
1712
|
returnType &&
|
1695
1713
|
!this._evaluator.assignType(returnType, prevReturnType,
|
1696
1714
|
/* diag */ undefined, new typeVarContext_1.TypeVarContext(),
|
1697
|
-
/* srcTypeVarContext */ undefined, 8 /* SkipSolveTypeVars */ | 512 /* IgnoreTypeVarScope */)) {
|
1715
|
+
/* srcTypeVarContext */ undefined, 8 /* AssignTypeFlags.SkipSolveTypeVars */ | 512 /* AssignTypeFlags.IgnoreTypeVarScope */)) {
|
1698
1716
|
const altNode = this._findNodeForOverload(node, prevOverload);
|
1699
1717
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportOverlappingOverload, diagnosticRules_1.DiagnosticRule.reportOverlappingOverload, localize_1.Localizer.Diagnostic.overloadReturnTypeMismatch().format({
|
1700
1718
|
name: node.name.value,
|
@@ -1715,7 +1733,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1715
1733
|
return undefined;
|
1716
1734
|
}
|
1717
1735
|
for (const decl of decls) {
|
1718
|
-
if (decl.type === 5 /* Function */) {
|
1736
|
+
if (decl.type === 5 /* DeclarationType.Function */) {
|
1719
1737
|
const functionType = this._evaluator.getTypeOfFunction(decl.node);
|
1720
1738
|
if ((functionType === null || functionType === void 0 ? void 0 : functionType.functionType) === overloadType) {
|
1721
1739
|
return decl.node;
|
@@ -1735,22 +1753,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1735
1753
|
}
|
1736
1754
|
return this._evaluator.assignType(functionType, prevOverload,
|
1737
1755
|
/* diag */ undefined, new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(functionType)),
|
1738
|
-
/* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */ | 16 /* OverloadOverlapCheck */);
|
1756
|
+
/* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */ | 16 /* AssignTypeFlags.OverloadOverlapCheck */);
|
1739
1757
|
}
|
1740
1758
|
_isLegalOverloadImplementation(overload, implementation, diag) {
|
1741
1759
|
var _a;
|
1742
1760
|
const implTypeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(implementation));
|
1743
1761
|
const overloadTypeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(overload));
|
1744
1762
|
// First check the parameters to see if they are assignable.
|
1745
|
-
let isLegal = this._evaluator.assignType(overload, implementation, diag, overloadTypeVarContext, implTypeVarContext, 32 /* SkipFunctionReturnTypeCheck */ |
|
1746
|
-
2 /* ReverseTypeVarMatching */ |
|
1747
|
-
256 /* SkipSelfClsTypeCheck */);
|
1763
|
+
let isLegal = this._evaluator.assignType(overload, implementation, diag, overloadTypeVarContext, implTypeVarContext, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */ |
|
1764
|
+
2 /* AssignTypeFlags.ReverseTypeVarMatching */ |
|
1765
|
+
256 /* AssignTypeFlags.SkipSelfClsTypeCheck */);
|
1748
1766
|
// Now check the return types.
|
1749
1767
|
const overloadReturnType = (_a = overload.details.declaredReturnType) !== null && _a !== void 0 ? _a : this._evaluator.getFunctionInferredReturnType(overload);
|
1750
1768
|
const implementationReturnType = (0, typeUtils_1.applySolvedTypeVars)(implementation.details.declaredReturnType || this._evaluator.getFunctionInferredReturnType(implementation), implTypeVarContext);
|
1751
1769
|
const returnDiag = new diagnostic_1.DiagnosticAddendum();
|
1752
1770
|
if (!(0, types_1.isNever)(overloadReturnType) &&
|
1753
|
-
!this._evaluator.assignType(implementationReturnType, overloadReturnType, returnDiag.createAddendum(), implTypeVarContext, overloadTypeVarContext, 8 /* SkipSolveTypeVars */)) {
|
1771
|
+
!this._evaluator.assignType(implementationReturnType, overloadReturnType, returnDiag.createAddendum(), implTypeVarContext, overloadTypeVarContext, 8 /* AssignTypeFlags.SkipSolveTypeVars */)) {
|
1754
1772
|
returnDiag.addMessage(localize_1.Localizer.DiagnosticAddendum.functionReturnTypeMismatch().format({
|
1755
1773
|
sourceType: this._evaluator.printType(overloadReturnType),
|
1756
1774
|
destType: this._evaluator.printType(implementationReturnType),
|
@@ -1786,72 +1804,72 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1786
1804
|
}
|
1787
1805
|
_validateStubStatement(statement) {
|
1788
1806
|
switch (statement.nodeType) {
|
1789
|
-
case 19 /* If */:
|
1790
|
-
case 28 /* Function */:
|
1791
|
-
case 10 /* Class */:
|
1792
|
-
case 0 /* Error */: {
|
1807
|
+
case 19 /* ParseNodeType.If */:
|
1808
|
+
case 28 /* ParseNodeType.Function */:
|
1809
|
+
case 10 /* ParseNodeType.Class */:
|
1810
|
+
case 0 /* ParseNodeType.Error */: {
|
1793
1811
|
// These are allowed in a stub file.
|
1794
1812
|
break;
|
1795
1813
|
}
|
1796
|
-
case 57 /* While */:
|
1797
|
-
case 26 /* For */:
|
1798
|
-
case 53 /* Try */:
|
1799
|
-
case 58 /* With */: {
|
1814
|
+
case 57 /* ParseNodeType.While */:
|
1815
|
+
case 26 /* ParseNodeType.For */:
|
1816
|
+
case 53 /* ParseNodeType.Try */:
|
1817
|
+
case 58 /* ParseNodeType.With */: {
|
1800
1818
|
// These are not allowed.
|
1801
1819
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportInvalidStubStatement, diagnosticRules_1.DiagnosticRule.reportInvalidStubStatement, localize_1.Localizer.Diagnostic.invalidStubStatement(), statement);
|
1802
1820
|
break;
|
1803
1821
|
}
|
1804
|
-
case 47 /* StatementList */: {
|
1822
|
+
case 47 /* ParseNodeType.StatementList */: {
|
1805
1823
|
for (const substatement of statement.statements) {
|
1806
1824
|
let isValid = true;
|
1807
1825
|
switch (substatement.nodeType) {
|
1808
|
-
case 2 /* Assert */:
|
1809
|
-
case 4 /* AssignmentExpression */:
|
1810
|
-
case 6 /* Await */:
|
1811
|
-
case 7 /* BinaryOperation */:
|
1812
|
-
case 11 /* Constant */:
|
1813
|
-
case 14 /* Del */:
|
1814
|
-
case 15 /* Dictionary */:
|
1815
|
-
case 24 /* Index */:
|
1816
|
-
case 26 /* For */:
|
1817
|
-
case 27 /* FormatString */:
|
1818
|
-
case 29 /* Global */:
|
1819
|
-
case 30 /* Lambda */:
|
1820
|
-
case 31 /* List */:
|
1821
|
-
case 35 /* MemberAccess */:
|
1822
|
-
case 38 /* Name */:
|
1823
|
-
case 39 /* Nonlocal */:
|
1824
|
-
case 40 /* Number */:
|
1825
|
-
case 43 /* Raise */:
|
1826
|
-
case 44 /* Return */:
|
1827
|
-
case 45 /* Set */:
|
1828
|
-
case 46 /* Slice */:
|
1829
|
-
case 51 /* Ternary */:
|
1830
|
-
case 52 /* Tuple */:
|
1831
|
-
case 53 /* Try */:
|
1832
|
-
case 55 /* UnaryOperation */:
|
1833
|
-
case 56 /* Unpack */:
|
1834
|
-
case 57 /* While */:
|
1835
|
-
case 58 /* With */:
|
1836
|
-
case 59 /* WithItem */:
|
1837
|
-
case 60 /* Yield */:
|
1838
|
-
case 61 /* YieldFrom */: {
|
1826
|
+
case 2 /* ParseNodeType.Assert */:
|
1827
|
+
case 4 /* ParseNodeType.AssignmentExpression */:
|
1828
|
+
case 6 /* ParseNodeType.Await */:
|
1829
|
+
case 7 /* ParseNodeType.BinaryOperation */:
|
1830
|
+
case 11 /* ParseNodeType.Constant */:
|
1831
|
+
case 14 /* ParseNodeType.Del */:
|
1832
|
+
case 15 /* ParseNodeType.Dictionary */:
|
1833
|
+
case 24 /* ParseNodeType.Index */:
|
1834
|
+
case 26 /* ParseNodeType.For */:
|
1835
|
+
case 27 /* ParseNodeType.FormatString */:
|
1836
|
+
case 29 /* ParseNodeType.Global */:
|
1837
|
+
case 30 /* ParseNodeType.Lambda */:
|
1838
|
+
case 31 /* ParseNodeType.List */:
|
1839
|
+
case 35 /* ParseNodeType.MemberAccess */:
|
1840
|
+
case 38 /* ParseNodeType.Name */:
|
1841
|
+
case 39 /* ParseNodeType.Nonlocal */:
|
1842
|
+
case 40 /* ParseNodeType.Number */:
|
1843
|
+
case 43 /* ParseNodeType.Raise */:
|
1844
|
+
case 44 /* ParseNodeType.Return */:
|
1845
|
+
case 45 /* ParseNodeType.Set */:
|
1846
|
+
case 46 /* ParseNodeType.Slice */:
|
1847
|
+
case 51 /* ParseNodeType.Ternary */:
|
1848
|
+
case 52 /* ParseNodeType.Tuple */:
|
1849
|
+
case 53 /* ParseNodeType.Try */:
|
1850
|
+
case 55 /* ParseNodeType.UnaryOperation */:
|
1851
|
+
case 56 /* ParseNodeType.Unpack */:
|
1852
|
+
case 57 /* ParseNodeType.While */:
|
1853
|
+
case 58 /* ParseNodeType.With */:
|
1854
|
+
case 59 /* ParseNodeType.WithItem */:
|
1855
|
+
case 60 /* ParseNodeType.Yield */:
|
1856
|
+
case 61 /* ParseNodeType.YieldFrom */: {
|
1839
1857
|
isValid = false;
|
1840
1858
|
break;
|
1841
1859
|
}
|
1842
|
-
case 5 /* AugmentedAssignment */: {
|
1860
|
+
case 5 /* ParseNodeType.AugmentedAssignment */: {
|
1843
1861
|
// Exempt __all__ manipulations.
|
1844
1862
|
isValid =
|
1845
|
-
substatement.operator === 1 /* AddEqual */ &&
|
1846
|
-
substatement.leftExpression.nodeType === 38 /* Name */ &&
|
1863
|
+
substatement.operator === 1 /* OperatorType.AddEqual */ &&
|
1864
|
+
substatement.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
|
1847
1865
|
substatement.leftExpression.value === '__all__';
|
1848
1866
|
break;
|
1849
1867
|
}
|
1850
|
-
case 9 /* Call */: {
|
1868
|
+
case 9 /* ParseNodeType.Call */: {
|
1851
1869
|
// Exempt __all__ manipulations.
|
1852
1870
|
isValid =
|
1853
|
-
substatement.leftExpression.nodeType === 35 /* MemberAccess */ &&
|
1854
|
-
substatement.leftExpression.leftExpression.nodeType === 38 /* Name */ &&
|
1871
|
+
substatement.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */ &&
|
1872
|
+
substatement.leftExpression.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
|
1855
1873
|
substatement.leftExpression.leftExpression.value === '__all__';
|
1856
1874
|
break;
|
1857
1875
|
}
|
@@ -1966,7 +1984,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1966
1984
|
const typedDecls = symbol.getTypedDeclarations();
|
1967
1985
|
if (typedDecls.length >= 1) {
|
1968
1986
|
const primaryDecl = typedDecls[0];
|
1969
|
-
if (primaryDecl.type === 5 /* Function */) {
|
1987
|
+
if (primaryDecl.type === 5 /* DeclarationType.Function */) {
|
1970
1988
|
const type = this._evaluator.getEffectiveTypeOfSymbol(symbol);
|
1971
1989
|
const overloadedFunctions = (0, types_1.isOverloadedFunction)(type)
|
1972
1990
|
? types_1.OverloadedFunctionType.getOverloads(type)
|
@@ -1990,7 +2008,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1990
2008
|
if (!implementationFunction) {
|
1991
2009
|
let exemptMissingImplementation = false;
|
1992
2010
|
const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
|
1993
|
-
if (containingClassNode && containingClassNode.nodeType === 10 /* Class */) {
|
2011
|
+
if (containingClassNode && containingClassNode.nodeType === 10 /* ParseNodeType.Class */) {
|
1994
2012
|
const classType = this._evaluator.getTypeOfClass(containingClassNode);
|
1995
2013
|
if (classType) {
|
1996
2014
|
if (types_1.ClassType.isProtocolClass(classType.classType)) {
|
@@ -2048,13 +2066,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2048
2066
|
}
|
2049
2067
|
sawFinal = true;
|
2050
2068
|
}
|
2051
|
-
if (decl.type === 1 /* Variable */ && decl.inferredTypeSource) {
|
2069
|
+
if (decl.type === 1 /* DeclarationType.Variable */ && decl.inferredTypeSource) {
|
2052
2070
|
if (sawAssignment) {
|
2053
2071
|
// We check for assignment of Final instance and class variables
|
2054
2072
|
// the type evaluator because we need to take into account whether
|
2055
2073
|
// the assignment is within an `__init__` method, so ignore class
|
2056
2074
|
// scopes here.
|
2057
|
-
if (scopeType !== 2 /* Class */) {
|
2075
|
+
if (scopeType !== 2 /* ScopeType.Class */) {
|
2058
2076
|
this._evaluator.addError(localize_1.Localizer.Diagnostic.finalReassigned().format({ name }), decl.node);
|
2059
2077
|
}
|
2060
2078
|
}
|
@@ -2063,7 +2081,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2063
2081
|
});
|
2064
2082
|
// If it's not a stub file, an assignment must be provided.
|
2065
2083
|
if (!sawAssignment && !this._fileInfo.isStubFile) {
|
2066
|
-
const firstDecl = decls.find((decl) => decl.type === 1 /* Variable */ && decl.isFinal);
|
2084
|
+
const firstDecl = decls.find((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isFinal);
|
2067
2085
|
if (firstDecl) {
|
2068
2086
|
// Is this an instance variable declared within a dataclass? If so, it
|
2069
2087
|
// is implicitly initialized by the synthesized `__init__` method and
|
@@ -2122,10 +2140,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2122
2140
|
let otherDecls = symbol.getDeclarations().filter((decl) => decl !== primaryDecl);
|
2123
2141
|
// If it's a function, we can skip any other declarations
|
2124
2142
|
// that are overloads or property setters/deleters.
|
2125
|
-
if (primaryDecl.type === 5 /* Function */) {
|
2143
|
+
if (primaryDecl.type === 5 /* DeclarationType.Function */) {
|
2126
2144
|
const primaryDeclTypeInfo = this._evaluator.getTypeOfFunction(primaryDecl.node);
|
2127
2145
|
otherDecls = otherDecls.filter((decl) => {
|
2128
|
-
if (decl.type !== 5 /* Function */) {
|
2146
|
+
if (decl.type !== 5 /* DeclarationType.Function */) {
|
2129
2147
|
return true;
|
2130
2148
|
}
|
2131
2149
|
const funcTypeInfo = this._evaluator.getTypeOfFunction(decl.node);
|
@@ -2153,7 +2171,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2153
2171
|
return;
|
2154
2172
|
}
|
2155
2173
|
let primaryDeclInfo;
|
2156
|
-
if (primaryDecl.type === 5 /* Function */) {
|
2174
|
+
if (primaryDecl.type === 5 /* DeclarationType.Function */) {
|
2157
2175
|
if (primaryDecl.isMethod) {
|
2158
2176
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeMethodDeclaration();
|
2159
2177
|
}
|
@@ -2161,16 +2179,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2161
2179
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeFunctionDeclaration();
|
2162
2180
|
}
|
2163
2181
|
}
|
2164
|
-
else if (primaryDecl.type === 6 /* Class */) {
|
2182
|
+
else if (primaryDecl.type === 6 /* DeclarationType.Class */) {
|
2165
2183
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeClassDeclaration();
|
2166
2184
|
}
|
2167
|
-
else if (primaryDecl.type === 2 /* Parameter */) {
|
2185
|
+
else if (primaryDecl.type === 2 /* DeclarationType.Parameter */) {
|
2168
2186
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeParameterDeclaration();
|
2169
2187
|
}
|
2170
|
-
else if (primaryDecl.type === 1 /* Variable */) {
|
2188
|
+
else if (primaryDecl.type === 1 /* DeclarationType.Variable */) {
|
2171
2189
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeVariableDeclaration();
|
2172
2190
|
}
|
2173
|
-
else if (primaryDecl.type === 4 /* TypeAlias */) {
|
2191
|
+
else if (primaryDecl.type === 4 /* DeclarationType.TypeAlias */) {
|
2174
2192
|
primaryDeclInfo = localize_1.Localizer.DiagnosticAddendum.seeTypeAliasDeclaration();
|
2175
2193
|
}
|
2176
2194
|
else {
|
@@ -2179,16 +2197,16 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2179
2197
|
const addPrimaryDeclInfo = (diag) => {
|
2180
2198
|
if (diag) {
|
2181
2199
|
let primaryDeclNode;
|
2182
|
-
if (primaryDecl.type === 5 /* Function */ || primaryDecl.type === 6 /* Class */) {
|
2200
|
+
if (primaryDecl.type === 5 /* DeclarationType.Function */ || primaryDecl.type === 6 /* DeclarationType.Class */) {
|
2183
2201
|
primaryDeclNode = primaryDecl.node.name;
|
2184
2202
|
}
|
2185
|
-
else if (primaryDecl.type === 1 /* Variable */) {
|
2186
|
-
if (primaryDecl.node.nodeType === 38 /* Name */) {
|
2203
|
+
else if (primaryDecl.type === 1 /* DeclarationType.Variable */) {
|
2204
|
+
if (primaryDecl.node.nodeType === 38 /* ParseNodeType.Name */) {
|
2187
2205
|
primaryDeclNode = primaryDecl.node;
|
2188
2206
|
}
|
2189
2207
|
}
|
2190
|
-
else if (primaryDecl.type === 2 /* Parameter */ ||
|
2191
|
-
primaryDecl.type === 3 /* TypeParameter */) {
|
2208
|
+
else if (primaryDecl.type === 2 /* DeclarationType.Parameter */ ||
|
2209
|
+
primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
|
2192
2210
|
if (primaryDecl.node.name) {
|
2193
2211
|
primaryDeclNode = primaryDecl.node.name;
|
2194
2212
|
}
|
@@ -2199,9 +2217,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2199
2217
|
}
|
2200
2218
|
};
|
2201
2219
|
for (const otherDecl of otherDecls) {
|
2202
|
-
if (otherDecl.type === 6 /* Class */) {
|
2220
|
+
if (otherDecl.type === 6 /* DeclarationType.Class */) {
|
2203
2221
|
let duplicateIsOk = false;
|
2204
|
-
if (primaryDecl.type === 3 /* TypeParameter */) {
|
2222
|
+
if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
|
2205
2223
|
// The error will be reported elsewhere if a type parameter is
|
2206
2224
|
// involved, so don't report it here.
|
2207
2225
|
duplicateIsOk = true;
|
@@ -2211,7 +2229,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2211
2229
|
addPrimaryDeclInfo(diag);
|
2212
2230
|
}
|
2213
2231
|
}
|
2214
|
-
else if (otherDecl.type === 5 /* Function */) {
|
2232
|
+
else if (otherDecl.type === 5 /* DeclarationType.Function */) {
|
2215
2233
|
const primaryType = (_a = this._evaluator.getTypeForDeclaration(primaryDecl)) === null || _a === void 0 ? void 0 : _a.type;
|
2216
2234
|
let duplicateIsOk = false;
|
2217
2235
|
// If the return type has not yet been inferred, do so now.
|
@@ -2234,7 +2252,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2234
2252
|
if (!isInSameStatementList && primaryType && otherType && (0, types_1.isTypeSame)(primaryType, otherType)) {
|
2235
2253
|
duplicateIsOk = true;
|
2236
2254
|
}
|
2237
|
-
if (primaryDecl.type === 3 /* TypeParameter */) {
|
2255
|
+
if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
|
2238
2256
|
// The error will be reported elsewhere if a type parameter is
|
2239
2257
|
// involved, so don't report it here.
|
2240
2258
|
duplicateIsOk = true;
|
@@ -2246,10 +2264,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2246
2264
|
addPrimaryDeclInfo(diag);
|
2247
2265
|
}
|
2248
2266
|
}
|
2249
|
-
else if (otherDecl.type === 2 /* Parameter */) {
|
2267
|
+
else if (otherDecl.type === 2 /* DeclarationType.Parameter */) {
|
2250
2268
|
if (otherDecl.node.name) {
|
2251
2269
|
let duplicateIsOk = false;
|
2252
|
-
if (primaryDecl.type === 3 /* TypeParameter */) {
|
2270
|
+
if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
|
2253
2271
|
// The error will be reported elsewhere if a type parameter is
|
2254
2272
|
// involved, so don't report it here.
|
2255
2273
|
duplicateIsOk = true;
|
@@ -2261,17 +2279,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2261
2279
|
}
|
2262
2280
|
}
|
2263
2281
|
}
|
2264
|
-
else if (otherDecl.type === 1 /* Variable */) {
|
2282
|
+
else if (otherDecl.type === 1 /* DeclarationType.Variable */) {
|
2265
2283
|
const primaryType = (_c = this._evaluator.getTypeForDeclaration(primaryDecl)) === null || _c === void 0 ? void 0 : _c.type;
|
2266
2284
|
if (otherDecl.typeAnnotationNode) {
|
2267
|
-
if (otherDecl.node.nodeType === 38 /* Name */) {
|
2285
|
+
if (otherDecl.node.nodeType === 38 /* ParseNodeType.Name */) {
|
2268
2286
|
let duplicateIsOk = false;
|
2269
2287
|
// It's OK if they both have the same declared type.
|
2270
2288
|
const otherType = (_d = this._evaluator.getTypeForDeclaration(otherDecl)) === null || _d === void 0 ? void 0 : _d.type;
|
2271
2289
|
if (primaryType && otherType && (0, types_1.isTypeSame)(primaryType, otherType)) {
|
2272
2290
|
duplicateIsOk = true;
|
2273
2291
|
}
|
2274
|
-
if (primaryDecl.type === 3 /* TypeParameter */) {
|
2292
|
+
if (primaryDecl.type === 3 /* DeclarationType.TypeParameter */) {
|
2275
2293
|
// The error will be reported elsewhere if a type parameter is
|
2276
2294
|
// involved, so don't report it here.
|
2277
2295
|
duplicateIsOk = true;
|
@@ -2283,7 +2301,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2283
2301
|
}
|
2284
2302
|
}
|
2285
2303
|
}
|
2286
|
-
else if (otherDecl.type === 4 /* TypeAlias */) {
|
2304
|
+
else if (otherDecl.type === 4 /* DeclarationType.TypeAlias */) {
|
2287
2305
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.obscuredTypeAliasDeclaration().format({ name }), otherDecl.node.name);
|
2288
2306
|
addPrimaryDeclInfo(diag);
|
2289
2307
|
}
|
@@ -2319,10 +2337,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2319
2337
|
let message;
|
2320
2338
|
let rule;
|
2321
2339
|
switch (decl.type) {
|
2322
|
-
case 8 /* Alias */:
|
2340
|
+
case 8 /* DeclarationType.Alias */:
|
2323
2341
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedImport;
|
2324
2342
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedImport;
|
2325
|
-
if (decl.node.nodeType === 21 /* ImportAs */) {
|
2343
|
+
if (decl.node.nodeType === 21 /* ParseNodeType.ImportAs */) {
|
2326
2344
|
if (decl.node.alias) {
|
2327
2345
|
// For statements of the form "import x as x", don't mark "x" as unaccessed
|
2328
2346
|
// because it's assumed to be re-exported.
|
@@ -2338,13 +2356,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2338
2356
|
const multipartName = nameParts.map((np) => np.value).join('.');
|
2339
2357
|
let textRange = { start: nameParts[0].start, length: nameParts[0].length };
|
2340
2358
|
textRange = textRange_1.TextRange.extend(textRange, nameParts[nameParts.length - 1]);
|
2341
|
-
this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: multipartName }), textRange, { action: "pyright.unusedImport" /* unusedImport */ });
|
2359
|
+
this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: multipartName }), textRange, { action: "pyright.unusedImport" /* Commands.unusedImport */ });
|
2342
2360
|
this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportUnusedImport, diagnosticRules_1.DiagnosticRule.reportUnusedImport, localize_1.Localizer.Diagnostic.unaccessedImport().format({ name: multipartName }), textRange);
|
2343
2361
|
return;
|
2344
2362
|
}
|
2345
2363
|
}
|
2346
2364
|
}
|
2347
|
-
else if (decl.node.nodeType === 23 /* ImportFromAs */) {
|
2365
|
+
else if (decl.node.nodeType === 23 /* ParseNodeType.ImportFromAs */) {
|
2348
2366
|
const importFrom = decl.node.parent;
|
2349
2367
|
// For statements of the form "from y import x as x", don't mark "x" as
|
2350
2368
|
// unaccessed because it's assumed to be re-exported.
|
@@ -2360,9 +2378,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2360
2378
|
message = localize_1.Localizer.Diagnostic.unaccessedImport().format({ name: nameNode.value });
|
2361
2379
|
}
|
2362
2380
|
break;
|
2363
|
-
case 4 /* TypeAlias */:
|
2364
|
-
case 1 /* Variable */:
|
2365
|
-
case 2 /* Parameter */:
|
2381
|
+
case 4 /* DeclarationType.TypeAlias */:
|
2382
|
+
case 1 /* DeclarationType.Variable */:
|
2383
|
+
case 2 /* DeclarationType.Parameter */:
|
2366
2384
|
if (!isPrivate) {
|
2367
2385
|
return;
|
2368
2386
|
}
|
@@ -2372,7 +2390,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2372
2390
|
return;
|
2373
2391
|
}
|
2374
2392
|
diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedVariable;
|
2375
|
-
if (decl.node.nodeType === 38 /* Name */) {
|
2393
|
+
if (decl.node.nodeType === 38 /* ParseNodeType.Name */) {
|
2376
2394
|
nameNode = decl.node;
|
2377
2395
|
// Don't emit a diagnostic if the name starts with an underscore.
|
2378
2396
|
// This indicates that the variable is unused.
|
@@ -2380,7 +2398,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2380
2398
|
diagnosticLevel = 'none';
|
2381
2399
|
}
|
2382
2400
|
}
|
2383
|
-
else if (decl.node.nodeType === 41 /* Parameter */) {
|
2401
|
+
else if (decl.node.nodeType === 41 /* ParseNodeType.Parameter */) {
|
2384
2402
|
nameNode = decl.node.name;
|
2385
2403
|
// Don't emit a diagnostic for unused parameters or type parameters.
|
2386
2404
|
diagnosticLevel = 'none';
|
@@ -2390,7 +2408,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2390
2408
|
message = localize_1.Localizer.Diagnostic.unaccessedVariable().format({ name: nameNode.value });
|
2391
2409
|
}
|
2392
2410
|
break;
|
2393
|
-
case 6 /* Class */:
|
2411
|
+
case 6 /* DeclarationType.Class */:
|
2394
2412
|
if (!isPrivate) {
|
2395
2413
|
return;
|
2396
2414
|
}
|
@@ -2404,7 +2422,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2404
2422
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedClass;
|
2405
2423
|
message = localize_1.Localizer.Diagnostic.unaccessedClass().format({ name: nameNode.value });
|
2406
2424
|
break;
|
2407
|
-
case 5 /* Function */:
|
2425
|
+
case 5 /* DeclarationType.Function */:
|
2408
2426
|
if (!isPrivate) {
|
2409
2427
|
return;
|
2410
2428
|
}
|
@@ -2418,18 +2436,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2418
2436
|
rule = diagnosticRules_1.DiagnosticRule.reportUnusedFunction;
|
2419
2437
|
message = localize_1.Localizer.Diagnostic.unaccessedFunction().format({ name: nameNode.value });
|
2420
2438
|
break;
|
2421
|
-
case 3 /* TypeParameter */:
|
2439
|
+
case 3 /* DeclarationType.TypeParameter */:
|
2422
2440
|
// Never report a diagnostic for an unused TypeParameter.
|
2423
2441
|
diagnosticLevel = 'none';
|
2424
2442
|
nameNode = decl.node.name;
|
2425
2443
|
break;
|
2426
|
-
case 0 /* Intrinsic */:
|
2427
|
-
case 7 /* SpecialBuiltInClass */:
|
2444
|
+
case 0 /* DeclarationType.Intrinsic */:
|
2445
|
+
case 7 /* DeclarationType.SpecialBuiltInClass */:
|
2428
2446
|
return;
|
2429
2447
|
default:
|
2430
2448
|
(0, debug_1.assertNever)(decl);
|
2431
2449
|
}
|
2432
|
-
const action = rule === diagnosticRules_1.DiagnosticRule.reportUnusedImport ? { action: "pyright.unusedImport" /* unusedImport */ } : undefined;
|
2450
|
+
const action = rule === diagnosticRules_1.DiagnosticRule.reportUnusedImport ? { action: "pyright.unusedImport" /* Commands.unusedImport */ } : undefined;
|
2433
2451
|
if (nameNode) {
|
2434
2452
|
this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.Localizer.Diagnostic.unaccessedSymbol().format({ name: nameNode.value }), nameNode, action);
|
2435
2453
|
if (rule !== undefined && message) {
|
@@ -2441,7 +2459,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2441
2459
|
// common source of programming errors. Also validates that arguments passed
|
2442
2460
|
// to isinstance or issubclass won't generate exceptions.
|
2443
2461
|
_validateIsInstanceCall(node) {
|
2444
|
-
if (node.leftExpression.nodeType !== 38 /* Name */ ||
|
2462
|
+
if (node.leftExpression.nodeType !== 38 /* ParseNodeType.Name */ ||
|
2445
2463
|
(node.leftExpression.value !== 'isinstance' && node.leftExpression.value !== 'issubclass') ||
|
2446
2464
|
node.arguments.length !== 2) {
|
2447
2465
|
return;
|
@@ -2461,21 +2479,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2461
2479
|
return;
|
2462
2480
|
}
|
2463
2481
|
let isValidType = true;
|
2482
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
2464
2483
|
(0, typeUtils_1.doForEachSubtype)(arg1Type, (arg1Subtype) => {
|
2465
2484
|
if ((0, types_1.isClassInstance)(arg1Subtype) && types_1.ClassType.isTupleClass(arg1Subtype) && arg1Subtype.tupleTypeArguments) {
|
2466
|
-
if (arg1Subtype.tupleTypeArguments.some((typeArg) => !this._isTypeSupportedTypeForIsInstance(typeArg.type, isInstanceCheck))) {
|
2485
|
+
if (arg1Subtype.tupleTypeArguments.some((typeArg) => !this._isTypeSupportedTypeForIsInstance(typeArg.type, isInstanceCheck, diag))) {
|
2467
2486
|
isValidType = false;
|
2468
2487
|
}
|
2469
2488
|
}
|
2470
2489
|
else {
|
2471
|
-
if (!this._isTypeSupportedTypeForIsInstance(arg1Subtype, isInstanceCheck)) {
|
2490
|
+
if (!this._isTypeSupportedTypeForIsInstance(arg1Subtype, isInstanceCheck, diag)) {
|
2472
2491
|
isValidType = false;
|
2473
2492
|
}
|
2474
2493
|
}
|
2475
2494
|
});
|
2476
2495
|
if (!isValidType) {
|
2477
|
-
const diag = new diagnostic_1.DiagnosticAddendum();
|
2478
|
-
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarNotAllowed());
|
2479
2496
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, isInstanceCheck
|
2480
2497
|
? localize_1.Localizer.Diagnostic.isInstanceInvalidType().format({
|
2481
2498
|
type: this._evaluator.printType(arg1Type),
|
@@ -2488,7 +2505,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2488
2505
|
// it's unnecessary.
|
2489
2506
|
let curNode = node;
|
2490
2507
|
while (curNode) {
|
2491
|
-
if (curNode.nodeType === 2 /* Assert */) {
|
2508
|
+
if (curNode.nodeType === 2 /* ParseNodeType.Assert */) {
|
2492
2509
|
return;
|
2493
2510
|
}
|
2494
2511
|
curNode = curNode.parent;
|
@@ -2556,12 +2573,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2556
2573
|
if (!isValidType) {
|
2557
2574
|
return;
|
2558
2575
|
}
|
2559
|
-
// According to PEP 544, protocol classes cannot be used as the right-hand
|
2560
|
-
// argument to isinstance or issubclass unless they are annotated as
|
2561
|
-
// "runtime checkable".
|
2562
|
-
if (classTypeList.some((type) => types_1.ClassType.isProtocolClass(type) && !types_1.ClassType.isRuntimeCheckable(type))) {
|
2563
|
-
this._evaluator.addError(localize_1.Localizer.Diagnostic.protocolUsedInCall().format({ name: callName }), node.arguments[1].valueExpression);
|
2564
|
-
}
|
2565
2576
|
if ((0, typeUtils_1.derivesFromAnyOrUnknown)(arg0Type)) {
|
2566
2577
|
return;
|
2567
2578
|
}
|
@@ -2652,35 +2663,45 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2652
2663
|
}
|
2653
2664
|
// Determines whether the specified type is allowed as the second argument
|
2654
2665
|
// to an isinstance or issubclass check.
|
2655
|
-
_isTypeSupportedTypeForIsInstance(type, isInstanceCheck) {
|
2666
|
+
_isTypeSupportedTypeForIsInstance(type, isInstanceCheck, diag) {
|
2656
2667
|
let isSupported = true;
|
2657
2668
|
(0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
|
2658
2669
|
subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
|
2659
2670
|
subtype = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(subtype);
|
2660
2671
|
switch (subtype.category) {
|
2661
|
-
case 2 /* Any */:
|
2662
|
-
case 1 /* Unknown */:
|
2663
|
-
case 0 /* Unbound */:
|
2672
|
+
case 2 /* TypeCategory.Any */:
|
2673
|
+
case 1 /* TypeCategory.Unknown */:
|
2674
|
+
case 0 /* TypeCategory.Unbound */:
|
2664
2675
|
break;
|
2665
|
-
case 6 /* Class */:
|
2676
|
+
case 6 /* TypeCategory.Class */:
|
2666
2677
|
if ((0, typeUtils_1.isNoneInstance)(subtype)) {
|
2678
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.noneNotAllowed());
|
2667
2679
|
isSupported = false;
|
2668
2680
|
}
|
2669
2681
|
else if (subtype.isTypeArgumentExplicit && !subtype.includeSubclasses) {
|
2670
2682
|
// If it's a class, make sure that it has not been given explicit
|
2671
2683
|
// type arguments. This will result in a TypeError exception.
|
2684
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.genericClassNotAllowed());
|
2685
|
+
isSupported = false;
|
2686
|
+
}
|
2687
|
+
else if (types_1.ClassType.isProtocolClass(subtype) &&
|
2688
|
+
!types_1.ClassType.isRuntimeCheckable(subtype) &&
|
2689
|
+
!subtype.includeSubclasses) {
|
2690
|
+
// According to PEP 544, protocol classes cannot be used as the right-hand
|
2691
|
+
// argument to isinstance or issubclass unless they are annotated as
|
2692
|
+
// "runtime checkable".
|
2693
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.protocolRequiresRuntimeCheckable());
|
2672
2694
|
isSupported = false;
|
2673
2695
|
}
|
2674
2696
|
break;
|
2675
|
-
case 4 /* Function */:
|
2697
|
+
case 4 /* TypeCategory.Function */:
|
2676
2698
|
if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
|
2699
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.genericClassNotAllowed());
|
2677
2700
|
isSupported = false;
|
2678
2701
|
}
|
2679
2702
|
break;
|
2680
|
-
case
|
2681
|
-
|
2682
|
-
break;
|
2683
|
-
default:
|
2703
|
+
case 9 /* TypeCategory.TypeVar */:
|
2704
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarNotAllowed());
|
2684
2705
|
isSupported = false;
|
2685
2706
|
break;
|
2686
2707
|
}
|
@@ -2690,7 +2711,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2690
2711
|
_isSymbolPrivate(nameValue, scopeType) {
|
2691
2712
|
// All variables within the scope of a function or a list
|
2692
2713
|
// comprehension are considered private.
|
2693
|
-
if (scopeType === 1 /* Function */ || scopeType === 0 /* ListComprehension */) {
|
2714
|
+
if (scopeType === 1 /* ScopeType.Function */ || scopeType === 0 /* ScopeType.ListComprehension */) {
|
2694
2715
|
return true;
|
2695
2716
|
}
|
2696
2717
|
// See if the symbol is private.
|
@@ -2699,7 +2720,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2699
2720
|
}
|
2700
2721
|
if (SymbolNameUtils.isProtectedName(nameValue)) {
|
2701
2722
|
// Protected names outside of a class scope are considered private.
|
2702
|
-
const isClassScope = scopeType === 2 /* Class */;
|
2723
|
+
const isClassScope = scopeType === 2 /* ScopeType.Class */;
|
2703
2724
|
return !isClassScope;
|
2704
2725
|
}
|
2705
2726
|
return false;
|
@@ -2741,7 +2762,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2741
2762
|
let deprecatedMessage;
|
2742
2763
|
function getDeprecatedMessageForFunction(functionType) {
|
2743
2764
|
if (functionType.details.declaration &&
|
2744
|
-
functionType.details.declaration.node.nodeType === 28 /* Function */) {
|
2765
|
+
functionType.details.declaration.node.nodeType === 28 /* ParseNodeType.Function */) {
|
2745
2766
|
const containingClass = ParseTreeUtils.getEnclosingClass(functionType.details.declaration.node,
|
2746
2767
|
/* stopAtFunction */ true);
|
2747
2768
|
if (containingClass) {
|
@@ -2898,7 +2919,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2898
2919
|
// Add a quick action that renames the file.
|
2899
2920
|
if (diag) {
|
2900
2921
|
const renameAction = {
|
2901
|
-
action: "renameShadowedFile" /* RenameShadowedFileAction */,
|
2922
|
+
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2902
2923
|
oldFile: this._fileInfo.filePath,
|
2903
2924
|
newFile: this._sourceMapper.getNextFileName(this._fileInfo.filePath),
|
2904
2925
|
};
|
@@ -2912,8 +2933,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2912
2933
|
return;
|
2913
2934
|
}
|
2914
2935
|
// Skip this check for relative imports.
|
2915
|
-
const nodeModule = node.nodeType === 23 /* ImportFromAs */
|
2916
|
-
? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */
|
2936
|
+
const nodeModule = node.nodeType === 23 /* ParseNodeType.ImportFromAs */
|
2937
|
+
? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */
|
2917
2938
|
? (_b = node.parent) === null || _b === void 0 ? void 0 : _b.module
|
2918
2939
|
: undefined
|
2919
2940
|
: node.module;
|
@@ -2921,9 +2942,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2921
2942
|
return;
|
2922
2943
|
}
|
2923
2944
|
// Otherwise use the name to determine if a match for a stdlib module.
|
2924
|
-
const namePartNodes = node.nodeType === 21 /* ImportAs */
|
2945
|
+
const namePartNodes = node.nodeType === 21 /* ParseNodeType.ImportAs */
|
2925
2946
|
? node.module.nameParts
|
2926
|
-
: node.nodeType === 23 /* ImportFromAs */
|
2947
|
+
: node.nodeType === 23 /* ParseNodeType.ImportFromAs */
|
2927
2948
|
? [node.name]
|
2928
2949
|
: node.module.nameParts;
|
2929
2950
|
const nameParts = namePartNodes.map((n) => n.value);
|
@@ -2949,7 +2970,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2949
2970
|
// Add a quick action that renames the file.
|
2950
2971
|
if (diag) {
|
2951
2972
|
const renameAction = {
|
2952
|
-
action: "renameShadowedFile" /* RenameShadowedFileAction */,
|
2973
|
+
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2953
2974
|
oldFile: p,
|
2954
2975
|
newFile: this._sourceMapper.getNextFileName(p),
|
2955
2976
|
};
|
@@ -2969,7 +2990,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2969
2990
|
return;
|
2970
2991
|
}
|
2971
2992
|
// Ignore privates in named arguments.
|
2972
|
-
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 1 /* Argument */ && node.parent.name === node) {
|
2993
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 1 /* ParseNodeType.Argument */ && node.parent.name === node) {
|
2973
2994
|
return;
|
2974
2995
|
}
|
2975
2996
|
const nameValue = node.value;
|
@@ -2985,7 +3006,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2985
3006
|
if (!primaryDeclaration || primaryDeclaration.node === node) {
|
2986
3007
|
return;
|
2987
3008
|
}
|
2988
|
-
if (primaryDeclaration.type === 8 /* Alias */) {
|
3009
|
+
if (primaryDeclaration.type === 8 /* DeclarationType.Alias */) {
|
2989
3010
|
// If this symbol is an import alias (i.e. it's a local name rather than the
|
2990
3011
|
// original imported name), skip the private check.
|
2991
3012
|
if (primaryDeclaration.usesLocalName) {
|
@@ -3081,12 +3102,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3081
3102
|
};
|
3082
3103
|
suiteNode.statements.forEach((statement) => {
|
3083
3104
|
if (!AnalyzerNodeInfo.isCodeUnreachable(statement)) {
|
3084
|
-
if (statement.nodeType === 47 /* StatementList */) {
|
3105
|
+
if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
|
3085
3106
|
for (const substatement of statement.statements) {
|
3086
|
-
if (substatement.nodeType !== 54 /* TypeAnnotation */ &&
|
3087
|
-
substatement.nodeType !== 18 /* Ellipsis */ &&
|
3088
|
-
substatement.nodeType !== 48 /* StringList */ &&
|
3089
|
-
substatement.nodeType !== 42 /* Pass */) {
|
3107
|
+
if (substatement.nodeType !== 54 /* ParseNodeType.TypeAnnotation */ &&
|
3108
|
+
substatement.nodeType !== 18 /* ParseNodeType.Ellipsis */ &&
|
3109
|
+
substatement.nodeType !== 48 /* ParseNodeType.StringList */ &&
|
3110
|
+
substatement.nodeType !== 42 /* ParseNodeType.Pass */) {
|
3090
3111
|
emitBadStatementError(substatement);
|
3091
3112
|
}
|
3092
3113
|
}
|
@@ -3157,10 +3178,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3157
3178
|
let declaredReturnType = functionType.details.declaredReturnType;
|
3158
3179
|
if (declaredReturnType) {
|
3159
3180
|
this._reportUnknownReturnResult(node, declaredReturnType);
|
3160
|
-
|
3161
|
-
declaredReturnType.details.declaredVariance === 4 /* Contravariant */) {
|
3162
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeContravariant(), returnAnnotation);
|
3163
|
-
}
|
3181
|
+
this._validateReturnTypeIsNotContravariant(declaredReturnType, returnAnnotation);
|
3164
3182
|
}
|
3165
3183
|
// Wrap the declared type in a generator type if the function is a generator.
|
3166
3184
|
if (types_1.FunctionType.isGenerator(functionType)) {
|
@@ -3201,6 +3219,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3201
3219
|
else {
|
3202
3220
|
const inferredReturnType = this._evaluator.getFunctionInferredReturnType(functionType);
|
3203
3221
|
this._reportUnknownReturnResult(node, inferredReturnType);
|
3222
|
+
this._validateReturnTypeIsNotContravariant(inferredReturnType, node.name);
|
3223
|
+
}
|
3224
|
+
}
|
3225
|
+
_validateReturnTypeIsNotContravariant(returnType, errorNode) {
|
3226
|
+
let isContraTypeVar = false;
|
3227
|
+
(0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
|
3228
|
+
if ((0, types_1.isTypeVar)(subtype) && subtype.details.declaredVariance === 4 /* Variance.Contravariant */) {
|
3229
|
+
isContraTypeVar = true;
|
3230
|
+
}
|
3231
|
+
});
|
3232
|
+
if (isContraTypeVar) {
|
3233
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeContravariant(), errorNode);
|
3204
3234
|
}
|
3205
3235
|
}
|
3206
3236
|
_reportUnknownReturnResult(node, returnType) {
|
@@ -3217,7 +3247,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3217
3247
|
// as Final in parent classes.
|
3218
3248
|
_validateFinalMemberOverrides(classType) {
|
3219
3249
|
classType.details.fields.forEach((localSymbol, name) => {
|
3220
|
-
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
|
3250
|
+
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
|
3221
3251
|
if (parentSymbol &&
|
3222
3252
|
(0, types_1.isInstantiableClass)(parentSymbol.classType) &&
|
3223
3253
|
this._evaluator.isFinalVariable(parentSymbol.symbol) &&
|
@@ -3240,7 +3270,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3240
3270
|
return;
|
3241
3271
|
}
|
3242
3272
|
const decls = symbol.getDeclarations();
|
3243
|
-
if (decls.length >= 2 && decls[0].type === 1 /* Variable */) {
|
3273
|
+
if (decls.length >= 2 && decls[0].type === 1 /* DeclarationType.Variable */) {
|
3244
3274
|
const symbolType = this._evaluator.getEffectiveTypeOfSymbol(symbol);
|
3245
3275
|
// Is this symbol a literal instance of the enum class?
|
3246
3276
|
if ((0, types_1.isClassInstance)(symbolType) &&
|
@@ -3275,10 +3305,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3275
3305
|
if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
|
3276
3306
|
return;
|
3277
3307
|
}
|
3278
|
-
if (decls[0].type === 1 /* Variable */) {
|
3308
|
+
if (decls[0].type === 1 /* DeclarationType.Variable */) {
|
3279
3309
|
// If none of the declarations involve assignments, assume it's
|
3280
3310
|
// not implemented in the protocol.
|
3281
|
-
if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
|
3311
|
+
if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
|
3282
3312
|
// This is a variable declaration that is not implemented in the
|
3283
3313
|
// protocol base class. Make sure it's implemented in the derived class.
|
3284
3314
|
if (!isSymbolImplemented(name)) {
|
@@ -3289,8 +3319,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3289
3319
|
}
|
3290
3320
|
}
|
3291
3321
|
}
|
3292
|
-
else if (decls[0].type === 5 /* Function */) {
|
3293
|
-
if (decls.every((decl) => decl.type !== 5 /* Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
|
3322
|
+
else if (decls[0].type === 5 /* DeclarationType.Function */) {
|
3323
|
+
if (decls.every((decl) => decl.type !== 5 /* DeclarationType.Function */ || ParseTreeUtils.isSuiteEmpty(decl.node.suite))) {
|
3294
3324
|
if ((0, pathUtils_1.getFileExtension)(decls[0].path).toLowerCase() !== '.pyi') {
|
3295
3325
|
if (!isSymbolImplemented(name)) {
|
3296
3326
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
|
@@ -3313,7 +3343,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3313
3343
|
if (!types_1.ClassType.isDataClass(classType)) {
|
3314
3344
|
return;
|
3315
3345
|
}
|
3316
|
-
const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* SkipBaseClasses */ | 64 /* DeclaredTypesOnly */);
|
3346
|
+
const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* MemberAccessFlags.SkipBaseClasses */ | 64 /* MemberAccessFlags.DeclaredTypesOnly */);
|
3317
3347
|
// If there's no __post_init__ method, there's nothing to check.
|
3318
3348
|
if (!postInitMember) {
|
3319
3349
|
return;
|
@@ -3436,7 +3466,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3436
3466
|
// variables. We need to make sure these are initialized.
|
3437
3467
|
const abstractSymbols = new Map();
|
3438
3468
|
if (types_1.ClassType.isFinal(classType)) {
|
3439
|
-
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* SupportsAbstractMethods */);
|
3469
|
+
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* ClassTypeFlags.SupportsAbstractMethods */);
|
3440
3470
|
}
|
3441
3471
|
classType.details.fields.forEach((localSymbol, name) => {
|
3442
3472
|
abstractSymbols.delete(name);
|
@@ -3453,14 +3483,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3453
3483
|
if (!containingClass) {
|
3454
3484
|
return true;
|
3455
3485
|
}
|
3456
|
-
if (containingClass.nodeType === 10 /* Class */) {
|
3486
|
+
if (containingClass.nodeType === 10 /* ParseNodeType.Class */) {
|
3457
3487
|
// If this is part of an assignment statement, assume it has been
|
3458
3488
|
// initialized as a class variable.
|
3459
|
-
if (((_a = decl.node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* Assignment */) {
|
3489
|
+
if (((_a = decl.node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 3 /* ParseNodeType.Assignment */) {
|
3460
3490
|
return true;
|
3461
3491
|
}
|
3462
|
-
if (((_b = decl.node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 54 /* TypeAnnotation */ &&
|
3463
|
-
((_c = decl.node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* Assignment */) {
|
3492
|
+
if (((_b = decl.node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 54 /* ParseNodeType.TypeAnnotation */ &&
|
3493
|
+
((_c = decl.node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* ParseNodeType.Assignment */) {
|
3464
3494
|
return true;
|
3465
3495
|
}
|
3466
3496
|
// If this is part of a dataclass or a class handled by a dataclass_transform,
|
@@ -3484,7 +3514,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3484
3514
|
}
|
3485
3515
|
// If the symbol is declared by its parent, we can assume it
|
3486
3516
|
// is initialized there.
|
3487
|
-
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
|
3517
|
+
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
|
3488
3518
|
if (parentSymbol) {
|
3489
3519
|
return;
|
3490
3520
|
}
|
@@ -3499,10 +3529,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3499
3529
|
if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
|
3500
3530
|
return;
|
3501
3531
|
}
|
3502
|
-
if (decls[0].type === 1 /* Variable */) {
|
3532
|
+
if (decls[0].type === 1 /* DeclarationType.Variable */) {
|
3503
3533
|
// If none of the declarations involve assignments, assume it's
|
3504
3534
|
// not implemented in the protocol.
|
3505
|
-
if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
|
3535
|
+
if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
|
3506
3536
|
// This is a variable declaration that is not implemented in the
|
3507
3537
|
// protocol base class. Make sure it's implemented in the derived class.
|
3508
3538
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.uninitializedAbstractVariable().format({
|
@@ -3540,7 +3570,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3540
3570
|
return;
|
3541
3571
|
}
|
3542
3572
|
// Skip type variables with auto-variance.
|
3543
|
-
if (param.details.declaredVariance === 0 /* Auto */) {
|
3573
|
+
if (param.details.declaredVariance === 0 /* Variance.Auto */) {
|
3544
3574
|
return;
|
3545
3575
|
}
|
3546
3576
|
// Replace all type arguments with a dummy type except for the
|
@@ -3563,26 +3593,26 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3563
3593
|
const isDestSubtypeOfSrc = this._evaluator.assignClassToSelf(srcType, destType);
|
3564
3594
|
let expectedVariance;
|
3565
3595
|
if (isDestSubtypeOfSrc) {
|
3566
|
-
expectedVariance = 3 /* Covariant */;
|
3596
|
+
expectedVariance = 3 /* Variance.Covariant */;
|
3567
3597
|
}
|
3568
3598
|
else {
|
3569
3599
|
const isSrcSubtypeOfDest = this._evaluator.assignClassToSelf(destType, srcType);
|
3570
3600
|
if (isSrcSubtypeOfDest) {
|
3571
|
-
expectedVariance = 4 /* Contravariant */;
|
3601
|
+
expectedVariance = 4 /* Variance.Contravariant */;
|
3572
3602
|
}
|
3573
3603
|
else {
|
3574
|
-
expectedVariance = 2 /* Invariant */;
|
3604
|
+
expectedVariance = 2 /* Variance.Invariant */;
|
3575
3605
|
}
|
3576
3606
|
}
|
3577
3607
|
if (expectedVariance !== classType.details.typeParameters[paramIndex].details.declaredVariance) {
|
3578
3608
|
let message;
|
3579
|
-
if (expectedVariance === 3 /* Covariant */) {
|
3609
|
+
if (expectedVariance === 3 /* Variance.Covariant */) {
|
3580
3610
|
message = localize_1.Localizer.Diagnostic.protocolVarianceCovariant().format({
|
3581
3611
|
variable: param.details.name,
|
3582
3612
|
class: classType.details.name,
|
3583
3613
|
});
|
3584
3614
|
}
|
3585
|
-
else if (expectedVariance === 4 /* Contravariant */) {
|
3615
|
+
else if (expectedVariance === 4 /* Variance.Contravariant */) {
|
3586
3616
|
message = localize_1.Localizer.Diagnostic.protocolVarianceContravariant().format({
|
3587
3617
|
variable: param.details.name,
|
3588
3618
|
class: classType.details.name,
|
@@ -3612,13 +3642,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3612
3642
|
}
|
3613
3643
|
classType.details.fields.forEach((symbol, name) => {
|
3614
3644
|
const decls = symbol.getDeclarations();
|
3615
|
-
const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* Variable */ && decl.isDefinedBySlots);
|
3645
|
+
const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isDefinedBySlots);
|
3616
3646
|
if (isDefinedBySlots) {
|
3617
3647
|
decls.forEach((decl) => {
|
3618
|
-
if (decl.type === 1 /* Variable */ &&
|
3648
|
+
if (decl.type === 1 /* DeclarationType.Variable */ &&
|
3619
3649
|
!decl.isDefinedBySlots &&
|
3620
3650
|
!decl.isDefinedByMemberAccess) {
|
3621
|
-
if (decl.node.nodeType === 38 /* Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
|
3651
|
+
if (decl.node.nodeType === 38 /* ParseNodeType.Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
|
3622
3652
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.slotsClassVarConflict().format({ name }), decl.node);
|
3623
3653
|
}
|
3624
3654
|
}
|
@@ -3684,25 +3714,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3684
3714
|
// often has an *args and/or **kwargs. We'll also set the ParamSpecValue
|
3685
3715
|
// because we don't care about the return type for this check.
|
3686
3716
|
initMemberType = types_1.FunctionType.cloneWithNewFlags(initMemberType, initMemberType.details.flags |
|
3687
|
-
32768 /* SkipArgsKwargsCompatibilityCheck */ |
|
3688
|
-
65536 /* ParamSpecValue */);
|
3717
|
+
32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
|
3718
|
+
65536 /* FunctionTypeFlags.ParamSpecValue */);
|
3689
3719
|
newMemberType = types_1.FunctionType.cloneWithNewFlags(newMemberType, initMemberType.details.flags |
|
3690
|
-
32768 /* SkipArgsKwargsCompatibilityCheck */ |
|
3691
|
-
65536 /* ParamSpecValue */);
|
3720
|
+
32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
|
3721
|
+
65536 /* FunctionTypeFlags.ParamSpecValue */);
|
3692
3722
|
if (!this._evaluator.assignType(newMemberType, initMemberType,
|
3693
3723
|
/* diag */ undefined,
|
3694
3724
|
/* destTypeVarContext */ undefined,
|
3695
|
-
/* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */) ||
|
3725
|
+
/* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */) ||
|
3696
3726
|
!this._evaluator.assignType(initMemberType, newMemberType,
|
3697
3727
|
/* diag */ undefined,
|
3698
3728
|
/* destTypeVarContext */ undefined,
|
3699
|
-
/* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */)) {
|
3729
|
+
/* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */)) {
|
3700
3730
|
const displayOnInit = types_1.ClassType.isSameGenericClass(initMethodResult.classType, classType);
|
3701
3731
|
const initDecl = initMemberType.details.declaration;
|
3702
3732
|
const newDecl = newMemberType.details.declaration;
|
3703
3733
|
if (initDecl && newDecl) {
|
3704
3734
|
const mainDecl = displayOnInit ? initDecl : newDecl;
|
3705
|
-
const mainDeclNode = mainDecl.node.nodeType === 28 /* Function */ ? mainDecl.node.name : mainDecl.node;
|
3735
|
+
const mainDeclNode = mainDecl.node.nodeType === 28 /* ParseNodeType.Function */ ? mainDecl.node.name : mainDecl.node;
|
3706
3736
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
3707
3737
|
const initSignature = this._evaluator.printType(initMemberType);
|
3708
3738
|
const newSignature = this._evaluator.printType(newMemberType);
|
@@ -3885,7 +3915,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3885
3915
|
/* baseClass */ undefined, diagAddendum,
|
3886
3916
|
/* enforceParamNameMatch */ true)) {
|
3887
3917
|
const decl = overrideFunction.details.declaration;
|
3888
|
-
if (decl && decl.type === 5 /* Function */) {
|
3918
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
3889
3919
|
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.baseClassMethodTypeIncompatible().format({
|
3890
3920
|
classType: childClassType.details.name,
|
3891
3921
|
name: memberName,
|
@@ -3971,7 +4001,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3971
4001
|
continue;
|
3972
4002
|
}
|
3973
4003
|
(0, debug_1.assert)((0, types_1.isClass)(mroBaseClass));
|
3974
|
-
const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* Default */);
|
4004
|
+
const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* MemberAccessFlags.Default */);
|
3975
4005
|
if (!baseClassAndSymbol) {
|
3976
4006
|
continue;
|
3977
4007
|
}
|
@@ -4001,8 +4031,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4001
4031
|
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
4002
4032
|
}
|
4003
4033
|
else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
|
4004
|
-
if (overrideType.
|
4005
|
-
overrideFunction = overrideType.
|
4034
|
+
if (overrideType.fgetInfo) {
|
4035
|
+
overrideFunction = overrideType.fgetInfo.methodType;
|
4006
4036
|
}
|
4007
4037
|
}
|
4008
4038
|
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || types_1.FunctionType.isOverridden(overrideFunction)) {
|
@@ -4035,8 +4065,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4035
4065
|
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
4036
4066
|
}
|
4037
4067
|
else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
|
4038
|
-
if (overrideType.
|
4039
|
-
overrideFunction = overrideType.
|
4068
|
+
if (overrideType.fgetInfo) {
|
4069
|
+
overrideFunction = overrideType.fgetInfo.methodType;
|
4040
4070
|
}
|
4041
4071
|
}
|
4042
4072
|
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
|
@@ -4096,7 +4126,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4096
4126
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
|
4097
4127
|
name: memberName,
|
4098
4128
|
className: baseClass.details.name,
|
4099
|
-
}) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
|
4129
|
+
}) + diagAddendum.getString(), decl.type === 5 /* DeclarationType.Function */ ? decl.node.name : decl.node);
|
4100
4130
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4101
4131
|
if (diag && origDecl) {
|
4102
4132
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
|
@@ -4108,7 +4138,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4108
4138
|
// Private names (starting with double underscore) are exempt from this check.
|
4109
4139
|
if (!SymbolNameUtils.isPrivateName(memberName) && types_1.FunctionType.isFinal(baseType)) {
|
4110
4140
|
const decl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideSymbol);
|
4111
|
-
if (decl && decl.type === 5 /* Function */) {
|
4141
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
4112
4142
|
const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
|
4113
4143
|
name: memberName,
|
4114
4144
|
className: baseClass.details.name,
|
@@ -4156,9 +4186,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4156
4186
|
else {
|
4157
4187
|
const baseClassType = baseClass;
|
4158
4188
|
const propMethodInfo = [
|
4159
|
-
['fget', (c) => c.
|
4160
|
-
['fset', (c) => c.
|
4161
|
-
['fdel', (c) => c.
|
4189
|
+
['fget', (c) => { var _a; return (_a = c.fgetInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
|
4190
|
+
['fset', (c) => { var _a; return (_a = c.fsetInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
|
4191
|
+
['fdel', (c) => { var _a; return (_a = c.fdelInfo) === null || _a === void 0 ? void 0 : _a.methodType; }],
|
4162
4192
|
];
|
4163
4193
|
propMethodInfo.forEach((info) => {
|
4164
4194
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
@@ -4194,7 +4224,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4194
4224
|
name: methodName,
|
4195
4225
|
}));
|
4196
4226
|
const decl = subclassMethodType.details.declaration;
|
4197
|
-
if (decl && decl.type === 5 /* Function */) {
|
4227
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
4198
4228
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
|
4199
4229
|
name: memberName,
|
4200
4230
|
className: baseClassType.details.name,
|
@@ -4222,7 +4252,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4222
4252
|
const primaryDecl = decls[0];
|
4223
4253
|
// Verify that the override type is assignable to (same or narrower than)
|
4224
4254
|
// the declared type of the base symbol.
|
4225
|
-
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
|
4255
|
+
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* DeclarationType.Variable */ && !primaryDecl.isFinal;
|
4226
4256
|
// If the entry is a member of a frozen dataclass, it is immutable,
|
4227
4257
|
// so it does not need to be invariant.
|
4228
4258
|
if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
|
@@ -4234,7 +4264,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4234
4264
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4235
4265
|
if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
|
4236
4266
|
/* destTypeVarContext */ undefined,
|
4237
|
-
/* srcTypeVarContext */ undefined, isInvariant ? 1 /* EnforceInvariance */ : 0 /* Default */)) {
|
4267
|
+
/* srcTypeVarContext */ undefined, isInvariant ? 1 /* AssignTypeFlags.EnforceInvariance */ : 0 /* AssignTypeFlags.Default */)) {
|
4238
4268
|
if (isInvariant) {
|
4239
4269
|
diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4240
4270
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.overrideIsInvariant());
|
@@ -4277,7 +4307,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4277
4307
|
}
|
4278
4308
|
// If the subclass is declaring an inner class, we'll consider that
|
4279
4309
|
// to be a ClassVar.
|
4280
|
-
if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* Class */)) {
|
4310
|
+
if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* DeclarationType.Class */)) {
|
4281
4311
|
isClassVar = true;
|
4282
4312
|
}
|
4283
4313
|
}
|
@@ -4367,7 +4397,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4367
4397
|
if (node.parameters[0].name) {
|
4368
4398
|
paramName = node.parameters[0].name.value;
|
4369
4399
|
}
|
4370
|
-
if (node.parameters[0].category !== 0 /* Simple */) {
|
4400
|
+
if (node.parameters[0].category !== 0 /* ParameterCategory.Simple */) {
|
4371
4401
|
firstParamIsSimple = false;
|
4372
4402
|
}
|
4373
4403
|
}
|
@@ -4413,9 +4443,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4413
4443
|
// it could be combined with other classes in a multi-inheritance
|
4414
4444
|
// situation that effectively adds new superclasses that we don't know
|
4415
4445
|
// about statically.
|
4416
|
-
let effectiveFlags = 16 /* SkipInstanceMembers */ | 1 /* SkipOriginalClass */;
|
4446
|
+
let effectiveFlags = 16 /* MemberAccessFlags.SkipInstanceMembers */ | 1 /* MemberAccessFlags.SkipOriginalClass */;
|
4417
4447
|
if (types_1.ClassType.isFinal(classType)) {
|
4418
|
-
effectiveFlags |= 4 /* SkipObjectBaseClass */;
|
4448
|
+
effectiveFlags |= 4 /* MemberAccessFlags.SkipObjectBaseClass */;
|
4419
4449
|
}
|
4420
4450
|
const methodMember = (0, typeUtils_1.lookUpClassMember)(classType, methodType.details.name, effectiveFlags);
|
4421
4451
|
if (!methodMember) {
|
@@ -4425,13 +4455,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4425
4455
|
// Now scan the implementation of the method to determine whether
|
4426
4456
|
// super().<method> has been called for all of the required base classes.
|
4427
4457
|
const callNodeWalker = new ParseTreeUtils.CallNodeWalker((node) => {
|
4428
|
-
if (node.leftExpression.nodeType === 35 /* MemberAccess */) {
|
4458
|
+
if (node.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
|
4429
4459
|
// Is it accessing the method by the same name?
|
4430
4460
|
if (node.leftExpression.memberName.value === methodType.details.name) {
|
4431
4461
|
const memberBaseExpr = node.leftExpression.leftExpression;
|
4432
4462
|
// Is it a "super" call?
|
4433
|
-
if (memberBaseExpr.nodeType === 9 /* Call */ &&
|
4434
|
-
memberBaseExpr.leftExpression.nodeType === 38 /* Name */ &&
|
4463
|
+
if (memberBaseExpr.nodeType === 9 /* ParseNodeType.Call */ &&
|
4464
|
+
memberBaseExpr.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
|
4435
4465
|
memberBaseExpr.leftExpression.value === 'super') {
|
4436
4466
|
foundCallOfMember = true;
|
4437
4467
|
}
|
@@ -4481,7 +4511,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4481
4511
|
return;
|
4482
4512
|
}
|
4483
4513
|
// If the method starts with a `*args: P.args`, skip the check.
|
4484
|
-
if (paramInfo.category === 1 /* ArgsList */ &&
|
4514
|
+
if (paramInfo.category === 1 /* ParameterCategory.ArgsList */ &&
|
4485
4515
|
(0, types_1.isParamSpec)(paramInfo.type) &&
|
4486
4516
|
paramInfo.type.paramSpecAccess === 'args') {
|
4487
4517
|
return;
|
@@ -4633,7 +4663,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4633
4663
|
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
|
4634
4664
|
const importModuleMap = new Map();
|
4635
4665
|
importStatements.orderedImports.forEach((importStatement) => {
|
4636
|
-
if (importStatement.node.nodeType === 22 /* ImportFrom */) {
|
4666
|
+
if (importStatement.node.nodeType === 22 /* ParseNodeType.ImportFrom */) {
|
4637
4667
|
const symbolMap = new Map();
|
4638
4668
|
importStatement.node.imports.forEach((importFromAs) => {
|
4639
4669
|
// Ignore duplicates if they're aliased.
|
@@ -4666,7 +4696,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4666
4696
|
const regionComments = (0, regions_1.getRegionComments)(this._parseResults);
|
4667
4697
|
const regionStack = [];
|
4668
4698
|
regionComments.forEach((regionComment) => {
|
4669
|
-
if (regionComment.type === 0 /* Region */) {
|
4699
|
+
if (regionComment.type === 0 /* RegionCommentType.Region */) {
|
4670
4700
|
regionStack.push(regionComment);
|
4671
4701
|
}
|
4672
4702
|
else {
|