@zzzen/pyright-internal 1.2.0-dev.20231119 → 1.2.0-dev.20231126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/analysis.d.ts +1 -1
- package/dist/analyzer/analysis.js +5 -1
- package/dist/analyzer/analysis.js.map +1 -1
- package/dist/analyzer/analyzerFileInfo.d.ts +1 -1
- package/dist/analyzer/analyzerNodeInfo.d.ts +1 -1
- package/dist/analyzer/analyzerNodeInfo.js +1 -1
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +198 -194
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/cacheManager.js +1 -1
- package/dist/analyzer/cacheManager.js.map +1 -1
- package/dist/analyzer/checker.js +257 -239
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +1 -1
- package/dist/analyzer/codeFlowEngine.js +26 -26
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +1 -1
- package/dist/analyzer/codeFlowTypes.js +23 -23
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +39 -37
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +40 -47
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +8 -8
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +23 -25
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +67 -63
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +2 -2
- package/dist/analyzer/declaration.js +10 -10
- package/dist/analyzer/declaration.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +41 -41
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.js +51 -51
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.js +27 -27
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +4 -4
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -1
- package/dist/analyzer/importResolver.js +21 -17
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.js +1 -1
- package/dist/analyzer/importResult.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +31 -27
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +36 -32
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +78 -78
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeReport.d.ts +1 -1
- package/dist/analyzer/packageTypeReport.js +2 -2
- package/dist/analyzer/packageTypeReport.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +90 -90
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +14 -14
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parentDirectoryCache.d.ts +2 -2
- package/dist/analyzer/parseTreeCleaner.js +5 -1
- package/dist/analyzer/parseTreeCleaner.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/parseTreeUtils.js +383 -379
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +161 -157
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +1 -1
- package/dist/analyzer/patternMatching.js +52 -50
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +18 -14
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +53 -44
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -14
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/pythonPathUtils.js +5 -1
- package/dist/analyzer/pythonPathUtils.js.map +1 -1
- package/dist/analyzer/regions.js +3 -3
- package/dist/analyzer/regions.js.map +1 -1
- package/dist/analyzer/scope.js +8 -8
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/scopeUtils.js +1 -1
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/service.js +5 -1
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +25 -21
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +2 -2
- package/dist/analyzer/sourceMapper.js +12 -8
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +40 -40
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +1 -1
- package/dist/analyzer/symbol.js +26 -26
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/symbolUtils.js +1 -1
- package/dist/analyzer/symbolUtils.js.map +1 -1
- package/dist/analyzer/testWalker.js +5 -5
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +1 -1
- package/dist/analyzer/tracePrinter.js +35 -31
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.js +5 -1
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +13 -9
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +1233 -1153
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -1
- package/dist/analyzer/typeEvaluatorTypes.js +3 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +1 -1
- package/dist/analyzer/typeGuards.js +79 -65
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +1 -1
- package/dist/analyzer/typePrinter.js +80 -76
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +26 -22
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +123 -123
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +9 -9
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.js +10 -10
- package/dist/analyzer/typedDicts.js +74 -70
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +16 -11
- package/dist/analyzer/types.js +179 -177
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +2 -2
- package/dist/backgroundAnalysisBase.js +5 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.js +5 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/commandController.js +7 -7
- package/dist/commands/commandController.js.map +1 -1
- package/dist/commands/commandResult.js +1 -1
- package/dist/commands/commandResult.js.map +1 -1
- package/dist/commands/commands.js +1 -1
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +196 -196
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/charCodes.js +1 -1
- package/dist/common/charCodes.js.map +1 -1
- package/dist/common/chokidarFileWatcherProvider.js +5 -1
- package/dist/common/chokidarFileWatcherProvider.js.map +1 -1
- package/dist/common/collectionUtils.d.ts +3 -3
- package/dist/common/collectionUtils.js +3 -3
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -1
- package/dist/common/commandLineOptions.js +5 -5
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -1
- package/dist/common/configOptions.js +11 -7
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.js +7 -3
- package/dist/common/console.js.map +1 -1
- package/dist/common/core.d.ts +2 -2
- package/dist/common/core.js +6 -6
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.js +6 -6
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/diagnosticRules.js +1 -1
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/diagnosticSink.js +12 -12
- package/dist/common/diagnosticSink.js.map +1 -1
- package/dist/common/editAction.d.ts +1 -1
- package/dist/common/editAction.js +2 -2
- package/dist/common/editAction.js.map +1 -1
- package/dist/common/envVarUtils.js +5 -1
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.js +1 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.js +5 -1
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js +2 -2
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/fileWatcher.d.ts +2 -2
- package/dist/common/fullAccessHost.js +10 -6
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +1 -1
- package/dist/common/host.js +2 -2
- package/dist/common/host.js.map +1 -1
- package/dist/common/lspUtils.js +7 -7
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/memUtils.d.ts +1 -1
- package/dist/common/pathUtils.js +12 -8
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/pythonVersion.js +1 -1
- package/dist/common/pythonVersion.js.map +1 -1
- package/dist/common/realFileSystem.js +5 -1
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.d.ts +1 -1
- package/dist/common/serviceProvider.js +5 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/serviceProviderExtensions.js +1 -1
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/stringUtils.js +5 -5
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.js +11 -7
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRange.js +3 -3
- package/dist/common/textRange.js.map +1 -1
- package/dist/languageServerBase.js +13 -13
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +3 -3
- package/dist/languageService/autoImporter.js +12 -8
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +27 -23
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/codeActionProvider.js +8 -8
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +166 -162
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.js +9 -9
- package/dist/languageService/completionProviderUtils.js.map +1 -1
- package/dist/languageService/definitionProvider.js +14 -10
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +7 -3
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +1 -1
- package/dist/languageService/documentSymbolCollector.js +21 -17
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +30 -26
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.js +1 -1
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/quickActions.js +10 -6
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +1 -1
- package/dist/languageService/referencesProvider.js +24 -20
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +8 -4
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.js +8 -4
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +20 -16
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +5 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +7 -9
- package/dist/localization/localize.js +5 -4
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +0 -3
- package/dist/localization/package.nls.de.json +0 -3
- package/dist/localization/package.nls.en-us.json +4 -3
- package/dist/localization/package.nls.es.json +0 -3
- package/dist/localization/package.nls.fr.json +0 -3
- package/dist/localization/package.nls.it.json +0 -3
- package/dist/localization/package.nls.ja.json +0 -3
- package/dist/localization/package.nls.ko.json +0 -3
- package/dist/localization/package.nls.pl.json +0 -3
- package/dist/localization/package.nls.pt-br.json +0 -3
- package/dist/localization/package.nls.qps-ploc.json +0 -3
- package/dist/localization/package.nls.ru.json +0 -3
- package/dist/localization/package.nls.tr.json +0 -3
- package/dist/localization/package.nls.zh-cn.json +0 -3
- package/dist/localization/package.nls.zh-tw.json +0 -3
- package/dist/parser/characterStream.js +3 -3
- package/dist/parser/characterStream.js.map +1 -1
- package/dist/parser/characters.js +13 -9
- package/dist/parser/characters.js.map +1 -1
- package/dist/parser/parseNodes.d.ts +12 -12
- package/dist/parser/parseNodes.js +193 -193
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.js +563 -559
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.js +47 -47
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.js +288 -288
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.js +35 -35
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/parser/unicode.d.ts +3 -3
- package/dist/pyright.js +21 -17
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +1 -0
- package/dist/pyrightFileSystem.js +1 -1
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +1 -0
- package/dist/tests/chainedSourceFiles.test.js +5 -1
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +5 -1
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/collectionUtils.test.js +5 -1
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/common.test.js +5 -1
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/debug.test.js +8 -4
- package/dist/tests/debug.test.js.map +1 -1
- package/dist/tests/deferred.test.js +5 -1
- package/dist/tests/deferred.test.js.map +1 -1
- package/dist/tests/diagnosticOverrides.test.js +5 -1
- package/dist/tests/diagnosticOverrides.test.js.map +1 -1
- package/dist/tests/docStringUtils.test.js +5 -1
- package/dist/tests/docStringUtils.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +5 -1
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +5 -1
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourSlashRunner.test.js +5 -1
- package/dist/tests/fourSlashRunner.test.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashParser.js +13 -13
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.js +11 -7
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/runner.d.ts +1 -1
- package/dist/tests/harness/fourslash/runner.js +5 -1
- package/dist/tests/harness/fourslash/runner.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +5 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.Consts.js +6 -2
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +17 -13
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/fourslash/testStateUtils.js +9 -5
- package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +5 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
- package/dist/tests/harness/testHost.js +5 -1
- package/dist/tests/harness/testHost.js.map +1 -1
- package/dist/tests/harness/utils.d.ts +13 -12
- package/dist/tests/harness/utils.js.map +1 -1
- package/dist/tests/harness/vfs/factory.js +6 -2
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +4 -3
- package/dist/tests/harness/vfs/filesystem.js +11 -7
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +30 -26
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +25 -25
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +6 -6
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/localizer.test.js +5 -1
- package/dist/tests/localizer.test.js.map +1 -1
- package/dist/tests/logger.test.js +5 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +10 -10
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +13 -9
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +5 -1
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +5 -1
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +5 -1
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/stringUtils.test.js +10 -6
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symbolNameUtils.test.js +5 -1
- package/dist/tests/symbolNameUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +5 -1
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testUtils.js +11 -7
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textRange.test.js +5 -1
- package/dist/tests/textRange.test.js.map +1 -1
- package/dist/tests/tokenizer.test.js +463 -459
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +14 -2
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +11 -3
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +11 -3
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +10 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +5 -1
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +44 -40
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +5 -1
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/tests/zipfs.test.js +5 -1
- package/dist/tests/zipfs.test.js.map +1 -1
- package/dist/workspaceFactory.js +2 -2
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +2 -2
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;
|
@@ -2487,7 +2505,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2487
2505
|
// it's unnecessary.
|
2488
2506
|
let curNode = node;
|
2489
2507
|
while (curNode) {
|
2490
|
-
if (curNode.nodeType === 2 /* Assert */) {
|
2508
|
+
if (curNode.nodeType === 2 /* ParseNodeType.Assert */) {
|
2491
2509
|
return;
|
2492
2510
|
}
|
2493
2511
|
curNode = curNode.parent;
|
@@ -2651,11 +2669,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2651
2669
|
subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
|
2652
2670
|
subtype = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(subtype);
|
2653
2671
|
switch (subtype.category) {
|
2654
|
-
case 2 /* Any */:
|
2655
|
-
case 1 /* Unknown */:
|
2656
|
-
case 0 /* Unbound */:
|
2672
|
+
case 2 /* TypeCategory.Any */:
|
2673
|
+
case 1 /* TypeCategory.Unknown */:
|
2674
|
+
case 0 /* TypeCategory.Unbound */:
|
2657
2675
|
break;
|
2658
|
-
case 6 /* Class */:
|
2676
|
+
case 6 /* TypeCategory.Class */:
|
2659
2677
|
if ((0, typeUtils_1.isNoneInstance)(subtype)) {
|
2660
2678
|
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.noneNotAllowed());
|
2661
2679
|
isSupported = false;
|
@@ -2676,13 +2694,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2676
2694
|
isSupported = false;
|
2677
2695
|
}
|
2678
2696
|
break;
|
2679
|
-
case 4 /* Function */:
|
2697
|
+
case 4 /* TypeCategory.Function */:
|
2680
2698
|
if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
|
2681
2699
|
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.genericClassNotAllowed());
|
2682
2700
|
isSupported = false;
|
2683
2701
|
}
|
2684
2702
|
break;
|
2685
|
-
case 9 /* TypeVar */:
|
2703
|
+
case 9 /* TypeCategory.TypeVar */:
|
2686
2704
|
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeVarNotAllowed());
|
2687
2705
|
isSupported = false;
|
2688
2706
|
break;
|
@@ -2693,7 +2711,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2693
2711
|
_isSymbolPrivate(nameValue, scopeType) {
|
2694
2712
|
// All variables within the scope of a function or a list
|
2695
2713
|
// comprehension are considered private.
|
2696
|
-
if (scopeType === 1 /* Function */ || scopeType === 0 /* ListComprehension */) {
|
2714
|
+
if (scopeType === 1 /* ScopeType.Function */ || scopeType === 0 /* ScopeType.ListComprehension */) {
|
2697
2715
|
return true;
|
2698
2716
|
}
|
2699
2717
|
// See if the symbol is private.
|
@@ -2702,7 +2720,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2702
2720
|
}
|
2703
2721
|
if (SymbolNameUtils.isProtectedName(nameValue)) {
|
2704
2722
|
// Protected names outside of a class scope are considered private.
|
2705
|
-
const isClassScope = scopeType === 2 /* Class */;
|
2723
|
+
const isClassScope = scopeType === 2 /* ScopeType.Class */;
|
2706
2724
|
return !isClassScope;
|
2707
2725
|
}
|
2708
2726
|
return false;
|
@@ -2744,7 +2762,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2744
2762
|
let deprecatedMessage;
|
2745
2763
|
function getDeprecatedMessageForFunction(functionType) {
|
2746
2764
|
if (functionType.details.declaration &&
|
2747
|
-
functionType.details.declaration.node.nodeType === 28 /* Function */) {
|
2765
|
+
functionType.details.declaration.node.nodeType === 28 /* ParseNodeType.Function */) {
|
2748
2766
|
const containingClass = ParseTreeUtils.getEnclosingClass(functionType.details.declaration.node,
|
2749
2767
|
/* stopAtFunction */ true);
|
2750
2768
|
if (containingClass) {
|
@@ -2901,7 +2919,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2901
2919
|
// Add a quick action that renames the file.
|
2902
2920
|
if (diag) {
|
2903
2921
|
const renameAction = {
|
2904
|
-
action: "renameShadowedFile" /* RenameShadowedFileAction */,
|
2922
|
+
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2905
2923
|
oldFile: this._fileInfo.filePath,
|
2906
2924
|
newFile: this._sourceMapper.getNextFileName(this._fileInfo.filePath),
|
2907
2925
|
};
|
@@ -2915,8 +2933,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2915
2933
|
return;
|
2916
2934
|
}
|
2917
2935
|
// Skip this check for relative imports.
|
2918
|
-
const nodeModule = node.nodeType === 23 /* ImportFromAs */
|
2919
|
-
? ((_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 */
|
2920
2938
|
? (_b = node.parent) === null || _b === void 0 ? void 0 : _b.module
|
2921
2939
|
: undefined
|
2922
2940
|
: node.module;
|
@@ -2924,9 +2942,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2924
2942
|
return;
|
2925
2943
|
}
|
2926
2944
|
// Otherwise use the name to determine if a match for a stdlib module.
|
2927
|
-
const namePartNodes = node.nodeType === 21 /* ImportAs */
|
2945
|
+
const namePartNodes = node.nodeType === 21 /* ParseNodeType.ImportAs */
|
2928
2946
|
? node.module.nameParts
|
2929
|
-
: node.nodeType === 23 /* ImportFromAs */
|
2947
|
+
: node.nodeType === 23 /* ParseNodeType.ImportFromAs */
|
2930
2948
|
? [node.name]
|
2931
2949
|
: node.module.nameParts;
|
2932
2950
|
const nameParts = namePartNodes.map((n) => n.value);
|
@@ -2952,7 +2970,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2952
2970
|
// Add a quick action that renames the file.
|
2953
2971
|
if (diag) {
|
2954
2972
|
const renameAction = {
|
2955
|
-
action: "renameShadowedFile" /* RenameShadowedFileAction */,
|
2973
|
+
action: "renameShadowedFile" /* ActionKind.RenameShadowedFileAction */,
|
2956
2974
|
oldFile: p,
|
2957
2975
|
newFile: this._sourceMapper.getNextFileName(p),
|
2958
2976
|
};
|
@@ -2972,7 +2990,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2972
2990
|
return;
|
2973
2991
|
}
|
2974
2992
|
// Ignore privates in named arguments.
|
2975
|
-
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) {
|
2976
2994
|
return;
|
2977
2995
|
}
|
2978
2996
|
const nameValue = node.value;
|
@@ -2988,7 +3006,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2988
3006
|
if (!primaryDeclaration || primaryDeclaration.node === node) {
|
2989
3007
|
return;
|
2990
3008
|
}
|
2991
|
-
if (primaryDeclaration.type === 8 /* Alias */) {
|
3009
|
+
if (primaryDeclaration.type === 8 /* DeclarationType.Alias */) {
|
2992
3010
|
// If this symbol is an import alias (i.e. it's a local name rather than the
|
2993
3011
|
// original imported name), skip the private check.
|
2994
3012
|
if (primaryDeclaration.usesLocalName) {
|
@@ -3084,12 +3102,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3084
3102
|
};
|
3085
3103
|
suiteNode.statements.forEach((statement) => {
|
3086
3104
|
if (!AnalyzerNodeInfo.isCodeUnreachable(statement)) {
|
3087
|
-
if (statement.nodeType === 47 /* StatementList */) {
|
3105
|
+
if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
|
3088
3106
|
for (const substatement of statement.statements) {
|
3089
|
-
if (substatement.nodeType !== 54 /* TypeAnnotation */ &&
|
3090
|
-
substatement.nodeType !== 18 /* Ellipsis */ &&
|
3091
|
-
substatement.nodeType !== 48 /* StringList */ &&
|
3092
|
-
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 */) {
|
3093
3111
|
emitBadStatementError(substatement);
|
3094
3112
|
}
|
3095
3113
|
}
|
@@ -3207,7 +3225,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3207
3225
|
_validateReturnTypeIsNotContravariant(returnType, errorNode) {
|
3208
3226
|
let isContraTypeVar = false;
|
3209
3227
|
(0, typeUtils_1.doForEachSubtype)(returnType, (subtype) => {
|
3210
|
-
if ((0, types_1.isTypeVar)(subtype) && subtype.details.declaredVariance === 4 /* Contravariant */) {
|
3228
|
+
if ((0, types_1.isTypeVar)(subtype) && subtype.details.declaredVariance === 4 /* Variance.Contravariant */) {
|
3211
3229
|
isContraTypeVar = true;
|
3212
3230
|
}
|
3213
3231
|
});
|
@@ -3229,7 +3247,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3229
3247
|
// as Final in parent classes.
|
3230
3248
|
_validateFinalMemberOverrides(classType) {
|
3231
3249
|
classType.details.fields.forEach((localSymbol, name) => {
|
3232
|
-
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
|
3250
|
+
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
|
3233
3251
|
if (parentSymbol &&
|
3234
3252
|
(0, types_1.isInstantiableClass)(parentSymbol.classType) &&
|
3235
3253
|
this._evaluator.isFinalVariable(parentSymbol.symbol) &&
|
@@ -3252,7 +3270,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3252
3270
|
return;
|
3253
3271
|
}
|
3254
3272
|
const decls = symbol.getDeclarations();
|
3255
|
-
if (decls.length >= 2 && decls[0].type === 1 /* Variable */) {
|
3273
|
+
if (decls.length >= 2 && decls[0].type === 1 /* DeclarationType.Variable */) {
|
3256
3274
|
const symbolType = this._evaluator.getEffectiveTypeOfSymbol(symbol);
|
3257
3275
|
// Is this symbol a literal instance of the enum class?
|
3258
3276
|
if ((0, types_1.isClassInstance)(symbolType) &&
|
@@ -3287,10 +3305,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3287
3305
|
if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
|
3288
3306
|
return;
|
3289
3307
|
}
|
3290
|
-
if (decls[0].type === 1 /* Variable */) {
|
3308
|
+
if (decls[0].type === 1 /* DeclarationType.Variable */) {
|
3291
3309
|
// If none of the declarations involve assignments, assume it's
|
3292
3310
|
// not implemented in the protocol.
|
3293
|
-
if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
|
3311
|
+
if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
|
3294
3312
|
// This is a variable declaration that is not implemented in the
|
3295
3313
|
// protocol base class. Make sure it's implemented in the derived class.
|
3296
3314
|
if (!isSymbolImplemented(name)) {
|
@@ -3301,8 +3319,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3301
3319
|
}
|
3302
3320
|
}
|
3303
3321
|
}
|
3304
|
-
else if (decls[0].type === 5 /* Function */) {
|
3305
|
-
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))) {
|
3306
3324
|
if ((0, pathUtils_1.getFileExtension)(decls[0].path).toLowerCase() !== '.pyi') {
|
3307
3325
|
if (!isSymbolImplemented(name)) {
|
3308
3326
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.missingProtocolMember().format({
|
@@ -3325,7 +3343,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3325
3343
|
if (!types_1.ClassType.isDataClass(classType)) {
|
3326
3344
|
return;
|
3327
3345
|
}
|
3328
|
-
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 */);
|
3329
3347
|
// If there's no __post_init__ method, there's nothing to check.
|
3330
3348
|
if (!postInitMember) {
|
3331
3349
|
return;
|
@@ -3448,7 +3466,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3448
3466
|
// variables. We need to make sure these are initialized.
|
3449
3467
|
const abstractSymbols = new Map();
|
3450
3468
|
if (types_1.ClassType.isFinal(classType)) {
|
3451
|
-
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* SupportsAbstractMethods */);
|
3469
|
+
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 1024 /* ClassTypeFlags.SupportsAbstractMethods */);
|
3452
3470
|
}
|
3453
3471
|
classType.details.fields.forEach((localSymbol, name) => {
|
3454
3472
|
abstractSymbols.delete(name);
|
@@ -3465,14 +3483,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3465
3483
|
if (!containingClass) {
|
3466
3484
|
return true;
|
3467
3485
|
}
|
3468
|
-
if (containingClass.nodeType === 10 /* Class */) {
|
3486
|
+
if (containingClass.nodeType === 10 /* ParseNodeType.Class */) {
|
3469
3487
|
// If this is part of an assignment statement, assume it has been
|
3470
3488
|
// initialized as a class variable.
|
3471
|
-
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 */) {
|
3472
3490
|
return true;
|
3473
3491
|
}
|
3474
|
-
if (((_b = decl.node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 54 /* TypeAnnotation */ &&
|
3475
|
-
((_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 */) {
|
3476
3494
|
return true;
|
3477
3495
|
}
|
3478
3496
|
// If this is part of a dataclass or a class handled by a dataclass_transform,
|
@@ -3496,7 +3514,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3496
3514
|
}
|
3497
3515
|
// If the symbol is declared by its parent, we can assume it
|
3498
3516
|
// is initialized there.
|
3499
|
-
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* SkipOriginalClass */);
|
3517
|
+
const parentSymbol = (0, typeUtils_1.lookUpClassMember)(classType, name, 1 /* MemberAccessFlags.SkipOriginalClass */);
|
3500
3518
|
if (parentSymbol) {
|
3501
3519
|
return;
|
3502
3520
|
}
|
@@ -3511,10 +3529,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3511
3529
|
if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
|
3512
3530
|
return;
|
3513
3531
|
}
|
3514
|
-
if (decls[0].type === 1 /* Variable */) {
|
3532
|
+
if (decls[0].type === 1 /* DeclarationType.Variable */) {
|
3515
3533
|
// If none of the declarations involve assignments, assume it's
|
3516
3534
|
// not implemented in the protocol.
|
3517
|
-
if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
|
3535
|
+
if (!decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && !!decl.inferredTypeSource)) {
|
3518
3536
|
// This is a variable declaration that is not implemented in the
|
3519
3537
|
// protocol base class. Make sure it's implemented in the derived class.
|
3520
3538
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.uninitializedAbstractVariable().format({
|
@@ -3552,7 +3570,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3552
3570
|
return;
|
3553
3571
|
}
|
3554
3572
|
// Skip type variables with auto-variance.
|
3555
|
-
if (param.details.declaredVariance === 0 /* Auto */) {
|
3573
|
+
if (param.details.declaredVariance === 0 /* Variance.Auto */) {
|
3556
3574
|
return;
|
3557
3575
|
}
|
3558
3576
|
// Replace all type arguments with a dummy type except for the
|
@@ -3575,26 +3593,26 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3575
3593
|
const isDestSubtypeOfSrc = this._evaluator.assignClassToSelf(srcType, destType);
|
3576
3594
|
let expectedVariance;
|
3577
3595
|
if (isDestSubtypeOfSrc) {
|
3578
|
-
expectedVariance = 3 /* Covariant */;
|
3596
|
+
expectedVariance = 3 /* Variance.Covariant */;
|
3579
3597
|
}
|
3580
3598
|
else {
|
3581
3599
|
const isSrcSubtypeOfDest = this._evaluator.assignClassToSelf(destType, srcType);
|
3582
3600
|
if (isSrcSubtypeOfDest) {
|
3583
|
-
expectedVariance = 4 /* Contravariant */;
|
3601
|
+
expectedVariance = 4 /* Variance.Contravariant */;
|
3584
3602
|
}
|
3585
3603
|
else {
|
3586
|
-
expectedVariance = 2 /* Invariant */;
|
3604
|
+
expectedVariance = 2 /* Variance.Invariant */;
|
3587
3605
|
}
|
3588
3606
|
}
|
3589
3607
|
if (expectedVariance !== classType.details.typeParameters[paramIndex].details.declaredVariance) {
|
3590
3608
|
let message;
|
3591
|
-
if (expectedVariance === 3 /* Covariant */) {
|
3609
|
+
if (expectedVariance === 3 /* Variance.Covariant */) {
|
3592
3610
|
message = localize_1.Localizer.Diagnostic.protocolVarianceCovariant().format({
|
3593
3611
|
variable: param.details.name,
|
3594
3612
|
class: classType.details.name,
|
3595
3613
|
});
|
3596
3614
|
}
|
3597
|
-
else if (expectedVariance === 4 /* Contravariant */) {
|
3615
|
+
else if (expectedVariance === 4 /* Variance.Contravariant */) {
|
3598
3616
|
message = localize_1.Localizer.Diagnostic.protocolVarianceContravariant().format({
|
3599
3617
|
variable: param.details.name,
|
3600
3618
|
class: classType.details.name,
|
@@ -3624,13 +3642,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3624
3642
|
}
|
3625
3643
|
classType.details.fields.forEach((symbol, name) => {
|
3626
3644
|
const decls = symbol.getDeclarations();
|
3627
|
-
const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* Variable */ && decl.isDefinedBySlots);
|
3645
|
+
const isDefinedBySlots = decls.some((decl) => decl.type === 1 /* DeclarationType.Variable */ && decl.isDefinedBySlots);
|
3628
3646
|
if (isDefinedBySlots) {
|
3629
3647
|
decls.forEach((decl) => {
|
3630
|
-
if (decl.type === 1 /* Variable */ &&
|
3648
|
+
if (decl.type === 1 /* DeclarationType.Variable */ &&
|
3631
3649
|
!decl.isDefinedBySlots &&
|
3632
3650
|
!decl.isDefinedByMemberAccess) {
|
3633
|
-
if (decl.node.nodeType === 38 /* Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
|
3651
|
+
if (decl.node.nodeType === 38 /* ParseNodeType.Name */ && ParseTreeUtils.isWriteAccess(decl.node)) {
|
3634
3652
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.slotsClassVarConflict().format({ name }), decl.node);
|
3635
3653
|
}
|
3636
3654
|
}
|
@@ -3696,25 +3714,25 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3696
3714
|
// often has an *args and/or **kwargs. We'll also set the ParamSpecValue
|
3697
3715
|
// because we don't care about the return type for this check.
|
3698
3716
|
initMemberType = types_1.FunctionType.cloneWithNewFlags(initMemberType, initMemberType.details.flags |
|
3699
|
-
32768 /* SkipArgsKwargsCompatibilityCheck */ |
|
3700
|
-
65536 /* ParamSpecValue */);
|
3717
|
+
32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
|
3718
|
+
65536 /* FunctionTypeFlags.ParamSpecValue */);
|
3701
3719
|
newMemberType = types_1.FunctionType.cloneWithNewFlags(newMemberType, initMemberType.details.flags |
|
3702
|
-
32768 /* SkipArgsKwargsCompatibilityCheck */ |
|
3703
|
-
65536 /* ParamSpecValue */);
|
3720
|
+
32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
|
3721
|
+
65536 /* FunctionTypeFlags.ParamSpecValue */);
|
3704
3722
|
if (!this._evaluator.assignType(newMemberType, initMemberType,
|
3705
3723
|
/* diag */ undefined,
|
3706
3724
|
/* destTypeVarContext */ undefined,
|
3707
|
-
/* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */) ||
|
3725
|
+
/* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */) ||
|
3708
3726
|
!this._evaluator.assignType(initMemberType, newMemberType,
|
3709
3727
|
/* diag */ undefined,
|
3710
3728
|
/* destTypeVarContext */ undefined,
|
3711
|
-
/* srcTypeVarContext */ undefined, 32 /* SkipFunctionReturnTypeCheck */)) {
|
3729
|
+
/* srcTypeVarContext */ undefined, 32 /* AssignTypeFlags.SkipFunctionReturnTypeCheck */)) {
|
3712
3730
|
const displayOnInit = types_1.ClassType.isSameGenericClass(initMethodResult.classType, classType);
|
3713
3731
|
const initDecl = initMemberType.details.declaration;
|
3714
3732
|
const newDecl = newMemberType.details.declaration;
|
3715
3733
|
if (initDecl && newDecl) {
|
3716
3734
|
const mainDecl = displayOnInit ? initDecl : newDecl;
|
3717
|
-
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;
|
3718
3736
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
3719
3737
|
const initSignature = this._evaluator.printType(initMemberType);
|
3720
3738
|
const newSignature = this._evaluator.printType(newMemberType);
|
@@ -3897,7 +3915,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3897
3915
|
/* baseClass */ undefined, diagAddendum,
|
3898
3916
|
/* enforceParamNameMatch */ true)) {
|
3899
3917
|
const decl = overrideFunction.details.declaration;
|
3900
|
-
if (decl && decl.type === 5 /* Function */) {
|
3918
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
3901
3919
|
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.baseClassMethodTypeIncompatible().format({
|
3902
3920
|
classType: childClassType.details.name,
|
3903
3921
|
name: memberName,
|
@@ -3983,7 +4001,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3983
4001
|
continue;
|
3984
4002
|
}
|
3985
4003
|
(0, debug_1.assert)((0, types_1.isClass)(mroBaseClass));
|
3986
|
-
const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* Default */);
|
4004
|
+
const baseClassAndSymbol = (0, typeUtils_1.lookUpClassMember)(mroBaseClass, name, 0 /* MemberAccessFlags.Default */);
|
3987
4005
|
if (!baseClassAndSymbol) {
|
3988
4006
|
continue;
|
3989
4007
|
}
|
@@ -4013,8 +4031,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4013
4031
|
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
4014
4032
|
}
|
4015
4033
|
else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
|
4016
|
-
if (overrideType.
|
4017
|
-
overrideFunction = overrideType.
|
4034
|
+
if (overrideType.fgetInfo) {
|
4035
|
+
overrideFunction = overrideType.fgetInfo.methodType;
|
4018
4036
|
}
|
4019
4037
|
}
|
4020
4038
|
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || types_1.FunctionType.isOverridden(overrideFunction)) {
|
@@ -4047,8 +4065,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4047
4065
|
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
4048
4066
|
}
|
4049
4067
|
else if ((0, types_1.isClassInstance)(overrideType) && types_1.ClassType.isPropertyClass(overrideType)) {
|
4050
|
-
if (overrideType.
|
4051
|
-
overrideFunction = overrideType.
|
4068
|
+
if (overrideType.fgetInfo) {
|
4069
|
+
overrideFunction = overrideType.fgetInfo.methodType;
|
4052
4070
|
}
|
4053
4071
|
}
|
4054
4072
|
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
|
@@ -4108,7 +4126,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4108
4126
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
|
4109
4127
|
name: memberName,
|
4110
4128
|
className: baseClass.details.name,
|
4111
|
-
}) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
|
4129
|
+
}) + diagAddendum.getString(), decl.type === 5 /* DeclarationType.Function */ ? decl.node.name : decl.node);
|
4112
4130
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4113
4131
|
if (diag && origDecl) {
|
4114
4132
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenMethod(), origDecl.path, origDecl.range);
|
@@ -4120,7 +4138,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4120
4138
|
// Private names (starting with double underscore) are exempt from this check.
|
4121
4139
|
if (!SymbolNameUtils.isPrivateName(memberName) && types_1.FunctionType.isFinal(baseType)) {
|
4122
4140
|
const decl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideSymbol);
|
4123
|
-
if (decl && decl.type === 5 /* Function */) {
|
4141
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
4124
4142
|
const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
|
4125
4143
|
name: memberName,
|
4126
4144
|
className: baseClass.details.name,
|
@@ -4168,9 +4186,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4168
4186
|
else {
|
4169
4187
|
const baseClassType = baseClass;
|
4170
4188
|
const propMethodInfo = [
|
4171
|
-
['fget', (c) => c.
|
4172
|
-
['fset', (c) => c.
|
4173
|
-
['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; }],
|
4174
4192
|
];
|
4175
4193
|
propMethodInfo.forEach((info) => {
|
4176
4194
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
@@ -4206,7 +4224,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4206
4224
|
name: methodName,
|
4207
4225
|
}));
|
4208
4226
|
const decl = subclassMethodType.details.declaration;
|
4209
|
-
if (decl && decl.type === 5 /* Function */) {
|
4227
|
+
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
4210
4228
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
|
4211
4229
|
name: memberName,
|
4212
4230
|
className: baseClassType.details.name,
|
@@ -4234,7 +4252,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4234
4252
|
const primaryDecl = decls[0];
|
4235
4253
|
// Verify that the override type is assignable to (same or narrower than)
|
4236
4254
|
// the declared type of the base symbol.
|
4237
|
-
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;
|
4238
4256
|
// If the entry is a member of a frozen dataclass, it is immutable,
|
4239
4257
|
// so it does not need to be invariant.
|
4240
4258
|
if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
|
@@ -4246,7 +4264,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4246
4264
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4247
4265
|
if (!this._evaluator.assignType(baseType, overrideType, diagAddendum,
|
4248
4266
|
/* destTypeVarContext */ undefined,
|
4249
|
-
/* srcTypeVarContext */ undefined, isInvariant ? 1 /* EnforceInvariance */ : 0 /* Default */)) {
|
4267
|
+
/* srcTypeVarContext */ undefined, isInvariant ? 1 /* AssignTypeFlags.EnforceInvariance */ : 0 /* AssignTypeFlags.Default */)) {
|
4250
4268
|
if (isInvariant) {
|
4251
4269
|
diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4252
4270
|
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.overrideIsInvariant());
|
@@ -4289,7 +4307,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4289
4307
|
}
|
4290
4308
|
// If the subclass is declaring an inner class, we'll consider that
|
4291
4309
|
// to be a ClassVar.
|
4292
|
-
if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* Class */)) {
|
4310
|
+
if (overrideSymbol.getTypedDeclarations().every((decl) => decl.type === 6 /* DeclarationType.Class */)) {
|
4293
4311
|
isClassVar = true;
|
4294
4312
|
}
|
4295
4313
|
}
|
@@ -4379,7 +4397,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4379
4397
|
if (node.parameters[0].name) {
|
4380
4398
|
paramName = node.parameters[0].name.value;
|
4381
4399
|
}
|
4382
|
-
if (node.parameters[0].category !== 0 /* Simple */) {
|
4400
|
+
if (node.parameters[0].category !== 0 /* ParameterCategory.Simple */) {
|
4383
4401
|
firstParamIsSimple = false;
|
4384
4402
|
}
|
4385
4403
|
}
|
@@ -4425,9 +4443,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4425
4443
|
// it could be combined with other classes in a multi-inheritance
|
4426
4444
|
// situation that effectively adds new superclasses that we don't know
|
4427
4445
|
// about statically.
|
4428
|
-
let effectiveFlags = 16 /* SkipInstanceMembers */ | 1 /* SkipOriginalClass */;
|
4446
|
+
let effectiveFlags = 16 /* MemberAccessFlags.SkipInstanceMembers */ | 1 /* MemberAccessFlags.SkipOriginalClass */;
|
4429
4447
|
if (types_1.ClassType.isFinal(classType)) {
|
4430
|
-
effectiveFlags |= 4 /* SkipObjectBaseClass */;
|
4448
|
+
effectiveFlags |= 4 /* MemberAccessFlags.SkipObjectBaseClass */;
|
4431
4449
|
}
|
4432
4450
|
const methodMember = (0, typeUtils_1.lookUpClassMember)(classType, methodType.details.name, effectiveFlags);
|
4433
4451
|
if (!methodMember) {
|
@@ -4437,13 +4455,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4437
4455
|
// Now scan the implementation of the method to determine whether
|
4438
4456
|
// super().<method> has been called for all of the required base classes.
|
4439
4457
|
const callNodeWalker = new ParseTreeUtils.CallNodeWalker((node) => {
|
4440
|
-
if (node.leftExpression.nodeType === 35 /* MemberAccess */) {
|
4458
|
+
if (node.leftExpression.nodeType === 35 /* ParseNodeType.MemberAccess */) {
|
4441
4459
|
// Is it accessing the method by the same name?
|
4442
4460
|
if (node.leftExpression.memberName.value === methodType.details.name) {
|
4443
4461
|
const memberBaseExpr = node.leftExpression.leftExpression;
|
4444
4462
|
// Is it a "super" call?
|
4445
|
-
if (memberBaseExpr.nodeType === 9 /* Call */ &&
|
4446
|
-
memberBaseExpr.leftExpression.nodeType === 38 /* Name */ &&
|
4463
|
+
if (memberBaseExpr.nodeType === 9 /* ParseNodeType.Call */ &&
|
4464
|
+
memberBaseExpr.leftExpression.nodeType === 38 /* ParseNodeType.Name */ &&
|
4447
4465
|
memberBaseExpr.leftExpression.value === 'super') {
|
4448
4466
|
foundCallOfMember = true;
|
4449
4467
|
}
|
@@ -4493,7 +4511,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4493
4511
|
return;
|
4494
4512
|
}
|
4495
4513
|
// If the method starts with a `*args: P.args`, skip the check.
|
4496
|
-
if (paramInfo.category === 1 /* ArgsList */ &&
|
4514
|
+
if (paramInfo.category === 1 /* ParameterCategory.ArgsList */ &&
|
4497
4515
|
(0, types_1.isParamSpec)(paramInfo.type) &&
|
4498
4516
|
paramInfo.type.paramSpecAccess === 'args') {
|
4499
4517
|
return;
|
@@ -4645,7 +4663,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4645
4663
|
const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
|
4646
4664
|
const importModuleMap = new Map();
|
4647
4665
|
importStatements.orderedImports.forEach((importStatement) => {
|
4648
|
-
if (importStatement.node.nodeType === 22 /* ImportFrom */) {
|
4666
|
+
if (importStatement.node.nodeType === 22 /* ParseNodeType.ImportFrom */) {
|
4649
4667
|
const symbolMap = new Map();
|
4650
4668
|
importStatement.node.imports.forEach((importFromAs) => {
|
4651
4669
|
// Ignore duplicates if they're aliased.
|
@@ -4678,7 +4696,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4678
4696
|
const regionComments = (0, regions_1.getRegionComments)(this._parseResults);
|
4679
4697
|
const regionStack = [];
|
4680
4698
|
regionComments.forEach((regionComment) => {
|
4681
|
-
if (regionComment.type === 0 /* Region */) {
|
4699
|
+
if (regionComment.type === 0 /* RegionCommentType.Region */) {
|
4682
4700
|
regionStack.push(regionComment);
|
4683
4701
|
}
|
4684
4702
|
else {
|