@zzzen/pyright-internal 1.2.0-dev.20260809 → 1.2.0-dev.20260823
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/analyzerNodeInfo.d.ts +119 -24
- package/dist/analyzer/analyzerNodeInfo.js +408 -89
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.d.ts +6 -3
- package/dist/analyzer/binder.js +157 -70
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +5 -2
- package/dist/analyzer/checker.js +92 -34
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +2 -1
- package/dist/analyzer/codeFlowEngine.js +12 -10
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.d.ts +2 -1
- package/dist/analyzer/codeFlowUtils.js +2 -3
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +47 -7
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +18 -8
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.d.ts +6 -4
- package/dist/analyzer/dataClasses.js +119 -75
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +2 -1
- package/dist/analyzer/declarationUtils.js +2 -2
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +5 -4
- package/dist/analyzer/decorators.js +38 -21
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.d.ts +5 -4
- package/dist/analyzer/enums.js +11 -10
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -1
- package/dist/analyzer/importResolver.js +5 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +3 -1
- package/dist/analyzer/importStatementUtils.js +14 -7
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.d.ts +2 -1
- package/dist/analyzer/namedTuples.js +3 -4
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +3 -2
- package/dist/analyzer/operations.js +8 -8
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +2 -2
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +13 -11
- package/dist/analyzer/parseTreeUtils.js +62 -36
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.d.ts +7 -2
- package/dist/analyzer/parseTreeWalker.js +29 -175
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.d.ts +4 -3
- package/dist/analyzer/patternMatching.js +47 -43
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -0
- package/dist/analyzer/program.js +235 -29
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +4 -3
- package/dist/analyzer/properties.js +7 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +14 -2
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/scope.d.ts +3 -0
- package/dist/analyzer/scope.js +10 -0
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/scopeUtils.d.ts +4 -3
- package/dist/analyzer/scopeUtils.js +8 -8
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/sentinel.d.ts +2 -1
- package/dist/analyzer/sentinel.js +2 -3
- package/dist/analyzer/sentinel.js.map +1 -1
- package/dist/analyzer/service.js +28 -10
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceEnumerator.d.ts +5 -0
- package/dist/analyzer/sourceEnumerator.js +57 -3
- package/dist/analyzer/sourceEnumerator.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +12 -6
- package/dist/analyzer/sourceFile.js +73 -50
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
- package/dist/analyzer/sourceFileInfoUtils.js +8 -0
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +4 -1
- package/dist/analyzer/sourceMapper.js +14 -8
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +4 -1
- package/dist/analyzer/symbol.js +8 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/testWalker.js +2 -1
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.d.ts +2 -1
- package/dist/analyzer/tracePrinter.js +2 -2
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/tuples.d.ts +3 -2
- package/dist/analyzer/tuples.js +5 -5
- package/dist/analyzer/tuples.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +6 -2
- package/dist/analyzer/typeCacheUtils.js +16 -37
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
- package/dist/analyzer/typeDocStringUtils.js +229 -132
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -0
- package/dist/analyzer/typeEvaluator.js +1280 -302
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +3 -2
- package/dist/analyzer/typeGuards.js +37 -33
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +12 -9
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +3 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +4 -3
- package/dist/analyzer/typedDicts.js +15 -14
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +11 -1
- package/dist/analyzer/types.js +48 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/collectionUtils.js +15 -6
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -0
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +4 -1
- package/dist/common/configOptions.js +68 -12
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/envVarUtils.d.ts +1 -0
- package/dist/common/envVarUtils.js +41 -10
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +3 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/extraPathGlob.d.ts +12 -0
- package/dist/common/extraPathGlob.js +315 -0
- package/dist/common/extraPathGlob.js.map +1 -0
- package/dist/common/host.d.ts +2 -0
- package/dist/common/host.js.map +1 -1
- package/dist/common/languageServerInterface.d.ts +2 -1
- package/dist/common/languageServerInterface.js.map +1 -1
- package/dist/common/pathConsts.d.ts +1 -0
- package/dist/common/pathConsts.js +11 -1
- package/dist/common/pathConsts.js.map +1 -1
- package/dist/common/processUtils.d.ts +4 -2
- package/dist/common/processUtils.js +3 -0
- package/dist/common/processUtils.js.map +1 -1
- package/dist/common/stringUtils.d.ts +6 -0
- package/dist/common/stringUtils.js +87 -5
- package/dist/common/stringUtils.js.map +1 -1
- package/dist/common/textEditTracker.d.ts +3 -1
- package/dist/common/textEditTracker.js +8 -6
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/textRangeCollection.d.ts +1 -0
- package/dist/common/textRangeCollection.js +32 -1
- package/dist/common/textRangeCollection.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +3 -0
- package/dist/common/uri/uriUtils.js +65 -15
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/fileSystemMapping.d.ts +10 -0
- package/dist/fileSystemMapping.js +176 -0
- package/dist/fileSystemMapping.js.map +1 -0
- package/dist/languageService/analyzerServiceExecutor.js +2 -1
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -0
- package/dist/languageService/autoImporter.js +32 -5
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +7 -0
- package/dist/languageService/callHierarchyProvider.js +97 -11
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +30 -8
- package/dist/languageService/completionProvider.js +298 -93
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +7 -6
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +2 -1
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +3 -1
- package/dist/languageService/documentSymbolCollector.js +78 -14
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +3 -2
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
- package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +2 -1
- package/dist/languageService/hoverProvider.js +48 -16
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/importSorter.d.ts +3 -1
- package/dist/languageService/importSorter.js +4 -2
- package/dist/languageService/importSorter.js.map +1 -1
- package/dist/languageService/importStatementCandidates.js +4 -2
- package/dist/languageService/importStatementCandidates.js.map +1 -1
- package/dist/languageService/quickActions.js +2 -1
- package/dist/languageService/quickActions.js.map +1 -1
- package/dist/languageService/referencesProvider.js +12 -5
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.d.ts +3 -0
- package/dist/languageService/signatureHelpProvider.js +56 -18
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +2 -1
- package/dist/languageService/symbolIndexer.js +7 -7
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +1 -1
- package/dist/languageService/tooltipUtils.js +103 -35
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +3 -2
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +12 -0
- package/dist/localization/localize.js +14 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +11 -0
- package/dist/localization/package.nls.de.json +11 -0
- package/dist/localization/package.nls.en-us.json +18 -0
- package/dist/localization/package.nls.es.json +11 -0
- package/dist/localization/package.nls.fr.json +11 -0
- package/dist/localization/package.nls.it.json +11 -0
- package/dist/localization/package.nls.ja.json +11 -0
- package/dist/localization/package.nls.ko.json +11 -0
- package/dist/localization/package.nls.pl.json +11 -0
- package/dist/localization/package.nls.pt-br.json +11 -0
- package/dist/localization/package.nls.qps-ploc.json +11 -0
- package/dist/localization/package.nls.ru.json +11 -0
- package/dist/localization/package.nls.tr.json +11 -0
- package/dist/localization/package.nls.zh-cn.json +12 -1
- package/dist/localization/package.nls.zh-tw.json +13 -2
- package/dist/parser/parseNodes.d.ts +85 -80
- package/dist/parser/parseNodes.js +182 -159
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parseTreeUtils.d.ts +3 -0
- package/dist/parser/parseTreeUtils.js +209 -0
- package/dist/parser/parseTreeUtils.js.map +1 -0
- package/dist/parser/parser.d.ts +16 -6
- package/dist/parser/parser.js +210 -144
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringAnnotationInfo.d.ts +16 -0
- package/dist/parser/stringAnnotationInfo.js +26 -0
- package/dist/parser/stringAnnotationInfo.js.map +1 -0
- package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
- package/dist/readonlyAugmentedFileSystem.js +17 -144
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
- package/dist/tests/analyzerNodeInfo.test.js +113 -0
- package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
- package/dist/tests/collectionUtils.test.js +46 -0
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/completions.test.js +34 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +131 -6
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/extraPathGlob.test.d.ts +1 -0
- package/dist/tests/extraPathGlob.test.js +434 -0
- package/dist/tests/extraPathGlob.test.js.map +1 -0
- package/dist/tests/fileSystemMapping.test.d.ts +1 -0
- package/dist/tests/fileSystemMapping.test.js +458 -0
- package/dist/tests/fileSystemMapping.test.js.map +1 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
- package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
- package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
- package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
- package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
- package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
- package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
- package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
- package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
- package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
- package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
- package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +1 -1
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/hoverProvider.test.js +38 -0
- package/dist/tests/hoverProvider.test.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +6 -3
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +38 -0
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +88 -0
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +60 -3
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +23 -0
- package/dist/tests/positionUtils.test.js.map +1 -1
- package/dist/tests/pyrightFileSystem.test.js +41 -0
- package/dist/tests/pyrightFileSystem.test.js.map +1 -1
- package/dist/tests/service.test.js +77 -0
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
- package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
- package/dist/tests/stringUtils.test.js +84 -0
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
- package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
- package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
- package/dist/tests/testUtils.d.ts +2 -0
- package/dist/tests/testUtils.js +7 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +2 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/textRangeCollection.test.d.ts +1 -0
- package/dist/tests/textRangeCollection.test.js +137 -0
- package/dist/tests/textRangeCollection.test.js.map +1 -0
- package/dist/tests/typeCacheUtils.test.d.ts +1 -0
- package/dist/tests/typeCacheUtils.test.js +69 -0
- package/dist/tests/typeCacheUtils.test.js.map +1 -0
- package/dist/tests/typeEvaluator1.test.js +24 -3
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +8 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +33 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +29 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +318 -4
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
- package/dist/tests/typeServer/typeCache.test.js +69 -0
- package/dist/tests/typeServer/typeCache.test.js.map +1 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
- package/dist/tests/types.test.d.ts +1 -0
- package/dist/{analyzer/parseTreeCleaner.js → tests/types.test.js} +23 -25
- package/dist/tests/types.test.js.map +1 -0
- package/dist/tests/uri.test.js +51 -0
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
- package/dist/typeServer/notebookDocumentHandler.js +16 -6
- package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
- package/dist/typeServer/programWrapper.d.ts +1 -0
- package/dist/typeServer/programWrapper.js +28 -15
- package/dist/typeServer/programWrapper.js.map +1 -1
- package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
- package/dist/typeServer/protocol/tspSupplemental.js +2 -2
- package/dist/typeServer/server.d.ts +13 -2
- package/dist/typeServer/server.js +36 -23
- package/dist/typeServer/server.js.map +1 -1
- package/dist/typeServer/typeCache.d.ts +8 -4
- package/dist/typeServer/typeCache.js +33 -5
- package/dist/typeServer/typeCache.js.map +1 -1
- package/dist/typeServer/typeEvalUtils.d.ts +2 -1
- package/dist/typeServer/typeEvalUtils.js +7 -3
- package/dist/typeServer/typeEvalUtils.js.map +1 -1
- package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
- package/dist/typeServer/typeServerFileSystem.js +16 -12
- package/dist/typeServer/typeServerFileSystem.js.map +1 -1
- package/package.json +7 -5
- package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
- package/dist/analyzer/parseTreeCleaner.js.map +0 -1
package/dist/parser/parser.js
CHANGED
|
@@ -57,6 +57,7 @@ const textRange_1 = require("../common/textRange");
|
|
|
57
57
|
const timing_1 = require("../common/timing");
|
|
58
58
|
const localize_1 = require("../localization/localize");
|
|
59
59
|
const parseNodes_1 = require("./parseNodes");
|
|
60
|
+
const stringAnnotationInfo_1 = require("./stringAnnotationInfo");
|
|
60
61
|
const StringTokenUtils = __importStar(require("./stringTokenUtils"));
|
|
61
62
|
const tokenizer_1 = require("./tokenizer");
|
|
62
63
|
const tokenizerTypes_1 = require("./tokenizerTypes");
|
|
@@ -104,13 +105,18 @@ class Parser {
|
|
|
104
105
|
this._typingSymbolAliases = new Map();
|
|
105
106
|
this._maxChildDepthMap = new Map();
|
|
106
107
|
this._hasTypeAnnotations = false;
|
|
108
|
+
this._createdOwnerKey = false;
|
|
109
|
+
this._stringAnnotations = (0, stringAnnotationInfo_1.createStringAnnotationInfo)();
|
|
107
110
|
}
|
|
108
|
-
parseSourceFile(fileContents, parseOptions, diagSink) {
|
|
111
|
+
parseSourceFile(fileContents, parseOptions, diagSink, contentHash) {
|
|
109
112
|
this._hasTypeAnnotations = false;
|
|
113
|
+
this._stringAnnotations = (0, stringAnnotationInfo_1.createStringAnnotationInfo)();
|
|
110
114
|
timing_1.timingStats.tokenizeFileTime.timeOperation(() => {
|
|
111
115
|
this._startNewParse(fileContents, 0, fileContents.length, parseOptions, diagSink);
|
|
112
116
|
});
|
|
113
117
|
const moduleNode = parseNodes_1.ModuleNode.create({ start: 0, length: fileContents.length });
|
|
118
|
+
this._ownerKey = moduleNode.a;
|
|
119
|
+
this._createdOwnerKey = true;
|
|
114
120
|
timing_1.timingStats.parseFileTime.timeOperation(() => {
|
|
115
121
|
while (!this._atEof()) {
|
|
116
122
|
if (!this._consumeTokenIfType(2 /* TokenType.NewLine */)) {
|
|
@@ -138,12 +144,14 @@ class Parser {
|
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
});
|
|
147
|
+
this._attachParserStringAnnotations();
|
|
141
148
|
(0, debug_1.assert)(this._tokenizerOutput !== undefined);
|
|
142
149
|
return {
|
|
143
150
|
text: fileContents,
|
|
144
|
-
contentHash: (0, stringUtils_1.
|
|
151
|
+
contentHash: contentHash ?? (0, stringUtils_1.getStringFingerprint)(fileContents),
|
|
145
152
|
parserOutput: {
|
|
146
153
|
parseTree: moduleNode,
|
|
154
|
+
stringAnnotations: this._stringAnnotations.info,
|
|
147
155
|
importedModules: this._importedModules,
|
|
148
156
|
futureImports: this._futureImports,
|
|
149
157
|
containsWildcardImport: this._containsWildcardImport,
|
|
@@ -154,7 +162,10 @@ class Parser {
|
|
|
154
162
|
tokenizerOutput: this._tokenizerOutput,
|
|
155
163
|
};
|
|
156
164
|
}
|
|
157
|
-
parseTextExpression(fileContents, textOffset, textLength, parseOptions, parseTextMode = 0 /* ParseTextMode.Expression */, initialParenDepth = 0, typingSymbolAliases) {
|
|
165
|
+
parseTextExpression(fileContents, textOffset, textLength, parseOptions, parseTextMode = 0 /* ParseTextMode.Expression */, initialParenDepth = 0, typingSymbolAliases, ownerKey) {
|
|
166
|
+
this._stringAnnotations = (0, stringAnnotationInfo_1.createStringAnnotationInfo)();
|
|
167
|
+
this._createdOwnerKey = ownerKey === undefined;
|
|
168
|
+
this._ownerKey = ownerKey ?? {};
|
|
158
169
|
const diagSink = new diagnosticSink_1.DiagnosticSink();
|
|
159
170
|
this._startNewParse(fileContents, textOffset, textLength, parseOptions, diagSink, initialParenDepth);
|
|
160
171
|
if (typingSymbolAliases) {
|
|
@@ -189,12 +200,29 @@ class Parser {
|
|
|
189
200
|
if (!this._atEof()) {
|
|
190
201
|
this._addSyntaxError(localize_1.LocMessage.unexpectedExprToken(), this._peekToken());
|
|
191
202
|
}
|
|
203
|
+
this._attachParserStringAnnotations();
|
|
192
204
|
return {
|
|
193
205
|
parseTree,
|
|
206
|
+
stringAnnotations: this._stringAnnotations.info,
|
|
194
207
|
lines: this._tokenizerOutput.lines,
|
|
195
208
|
diagnostics: diagSink.fetchAndClear(),
|
|
196
209
|
};
|
|
197
210
|
}
|
|
211
|
+
// Attaches parser-derived string annotations onto the owner key, but only when
|
|
212
|
+
// this parser instance created that key (top-level file parse, or a standalone
|
|
213
|
+
// expression parse with no inherited owner key) and only when the tree actually
|
|
214
|
+
// contains at least one quoted annotation. Nested re-parses inherit their
|
|
215
|
+
// parent's owner key and merge their annotations back into the parent, so they
|
|
216
|
+
// must not attach; the key-creating parser attaches the fully merged set.
|
|
217
|
+
_attachParserStringAnnotations() {
|
|
218
|
+
if (this._createdOwnerKey && this._ownerKey !== undefined && this._stringAnnotations.info.size > 0) {
|
|
219
|
+
(0, parseNodes_1.setParserStringAnnotationInfo)(this._ownerKey, this._stringAnnotations.info);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_getOwnerKey() {
|
|
223
|
+
(0, debug_1.assert)(this._ownerKey !== undefined);
|
|
224
|
+
return this._ownerKey;
|
|
225
|
+
}
|
|
198
226
|
_startNewParse(fileContents, textOffset, textLength, parseOptions, diagSink, initialParenDepth = 0) {
|
|
199
227
|
this._fileContents = fileContents;
|
|
200
228
|
this._parseOptions = parseOptions;
|
|
@@ -316,7 +344,7 @@ class Parser {
|
|
|
316
344
|
}
|
|
317
345
|
const nameToken = this._getTokenIfIdentifier();
|
|
318
346
|
(0, debug_1.assert)(nameToken !== undefined);
|
|
319
|
-
const name = parseNodes_1.NameNode.create(nameToken);
|
|
347
|
+
const name = parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken);
|
|
320
348
|
let typeParameters;
|
|
321
349
|
if (this._peekToken().type === 15 /* TokenType.OpenBracket */) {
|
|
322
350
|
typeParameters = this._parseTypeParameterList();
|
|
@@ -333,7 +361,7 @@ class Parser {
|
|
|
333
361
|
this._isParsingTypeAnnotation = true;
|
|
334
362
|
const expression = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
335
363
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
|
336
|
-
return parseNodes_1.TypeAliasNode.create(typeToken, name, expression, typeParameters);
|
|
364
|
+
return parseNodes_1.TypeAliasNode.create(this._getOwnerKey(), typeToken, name, expression, typeParameters);
|
|
337
365
|
}
|
|
338
366
|
// type_param_seq: '[' (type_param ',')+ ']'
|
|
339
367
|
_parseTypeParameterList() {
|
|
@@ -365,7 +393,7 @@ class Parser {
|
|
|
365
393
|
else {
|
|
366
394
|
this._getNextToken();
|
|
367
395
|
}
|
|
368
|
-
return parseNodes_1.TypeParameterListNode.create(openBracketToken, closingToken, typeVariableNodes);
|
|
396
|
+
return parseNodes_1.TypeParameterListNode.create(this._getOwnerKey(), openBracketToken, closingToken, typeVariableNodes);
|
|
369
397
|
}
|
|
370
398
|
// type_param: ['*' | '**'] NAME [':' bound_expr] ['=' default_expr]
|
|
371
399
|
_parseTypeParameter() {
|
|
@@ -381,7 +409,7 @@ class Parser {
|
|
|
381
409
|
this._addSyntaxError(localize_1.LocMessage.expectedTypeParameterName(), this._peekToken());
|
|
382
410
|
return undefined;
|
|
383
411
|
}
|
|
384
|
-
const name = parseNodes_1.NameNode.create(nameToken);
|
|
412
|
+
const name = parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken);
|
|
385
413
|
let boundExpression;
|
|
386
414
|
if (this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
|
387
415
|
boundExpression = this._parseExpression(/* allowUnpack */ false);
|
|
@@ -398,7 +426,7 @@ class Parser {
|
|
|
398
426
|
this._addSyntaxError(localize_1.LocMessage.typeVarDefaultIllegal(), defaultExpression);
|
|
399
427
|
}
|
|
400
428
|
}
|
|
401
|
-
return parseNodes_1.TypeParameterNode.create(name, typeParamCategory, boundExpression, defaultExpression);
|
|
429
|
+
return parseNodes_1.TypeParameterNode.create(this._getOwnerKey(), name, typeParamCategory, boundExpression, defaultExpression);
|
|
402
430
|
}
|
|
403
431
|
// match_stmt: "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
|
|
404
432
|
// subject_expr:
|
|
@@ -429,7 +457,7 @@ class Parser {
|
|
|
429
457
|
const subjectExpression = this._parseTestOrStarListAsExpression(
|
|
430
458
|
/* allowAssignmentExpression */ true,
|
|
431
459
|
/* allowMultipleUnpack */ true, 12 /* ErrorExpressionCategory.MissingPatternSubject */, () => localize_1.LocMessage.expectedReturnExpr());
|
|
432
|
-
const matchNode = parseNodes_1.MatchNode.create(matchToken, subjectExpression);
|
|
460
|
+
const matchNode = parseNodes_1.MatchNode.create(this._getOwnerKey(), matchToken, subjectExpression);
|
|
433
461
|
const nextToken = this._peekToken();
|
|
434
462
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
|
435
463
|
this._addSyntaxError(localize_1.LocMessage.expectedColon(), nextToken);
|
|
@@ -530,19 +558,19 @@ class Parser {
|
|
|
530
558
|
}
|
|
531
559
|
else if (patternList.list.length === 0) {
|
|
532
560
|
this._addSyntaxError(localize_1.LocMessage.expectedPatternExpr(), this._peekToken());
|
|
533
|
-
casePattern = parseNodes_1.ErrorNode.create(caseToken, 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
561
|
+
casePattern = parseNodes_1.ErrorNode.create(this._getOwnerKey(), caseToken, 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
534
562
|
}
|
|
535
563
|
else if (patternList.list.length === 1 && !patternList.trailingComma) {
|
|
536
564
|
const pattern = patternList.list[0].d.orPatterns[0];
|
|
537
565
|
if (pattern.nodeType === 69 /* ParseNodeType.PatternCapture */ && pattern.d.isStar) {
|
|
538
|
-
casePattern = parseNodes_1.PatternSequenceNode.create(patternList.list[0], patternList.list);
|
|
566
|
+
casePattern = parseNodes_1.PatternSequenceNode.create(this._getOwnerKey(), patternList.list[0], patternList.list);
|
|
539
567
|
}
|
|
540
568
|
else {
|
|
541
569
|
casePattern = patternList.list[0];
|
|
542
570
|
}
|
|
543
571
|
}
|
|
544
572
|
else {
|
|
545
|
-
casePattern = parseNodes_1.PatternSequenceNode.create(patternList.list[0], patternList.list);
|
|
573
|
+
casePattern = parseNodes_1.PatternSequenceNode.create(this._getOwnerKey(), patternList.list[0], patternList.list);
|
|
546
574
|
}
|
|
547
575
|
if (casePattern.nodeType !== 0 /* ParseNodeType.Error */) {
|
|
548
576
|
const globalNameMap = new Map();
|
|
@@ -554,7 +582,7 @@ class Parser {
|
|
|
554
582
|
guardExpression = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
555
583
|
}
|
|
556
584
|
const suite = this._parseSuite(this._isInFunction);
|
|
557
|
-
return parseNodes_1.CaseNode.create(caseToken, casePattern, this._isPatternIrrefutable(casePattern), guardExpression, suite);
|
|
585
|
+
return parseNodes_1.CaseNode.create(this._getOwnerKey(), caseToken, casePattern, this._isPatternIrrefutable(casePattern), guardExpression, suite);
|
|
558
586
|
}
|
|
559
587
|
// PEP 634 defines the concept of an "irrefutable" pattern - a pattern that
|
|
560
588
|
// will always be matched.
|
|
@@ -722,7 +750,7 @@ class Parser {
|
|
|
722
750
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
|
723
751
|
const nameToken = this._getTokenIfIdentifier();
|
|
724
752
|
if (nameToken) {
|
|
725
|
-
target = parseNodes_1.NameNode.create(nameToken);
|
|
753
|
+
target = parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken);
|
|
726
754
|
}
|
|
727
755
|
else {
|
|
728
756
|
this._addSyntaxError(localize_1.LocMessage.expectedNameAfterAs(), this._peekToken());
|
|
@@ -758,7 +786,7 @@ class Parser {
|
|
|
758
786
|
this._addSyntaxError(localize_1.LocMessage.orPatternMissingName() + diag.getString(), orPattern);
|
|
759
787
|
}
|
|
760
788
|
});
|
|
761
|
-
return parseNodes_1.PatternAsNode.create(orPatterns, target);
|
|
789
|
+
return parseNodes_1.PatternAsNode.create(this._getOwnerKey(), orPatterns, target);
|
|
762
790
|
}
|
|
763
791
|
// pattern_atom:
|
|
764
792
|
// | literal_pattern
|
|
@@ -789,7 +817,7 @@ class Parser {
|
|
|
789
817
|
const classNameExpr = patternCaptureOrValue.nodeType === 69 /* ParseNodeType.PatternCapture */
|
|
790
818
|
? patternCaptureOrValue.d.target
|
|
791
819
|
: patternCaptureOrValue.d.expr;
|
|
792
|
-
const classPattern = parseNodes_1.PatternClassNode.create(classNameExpr, args);
|
|
820
|
+
const classPattern = parseNodes_1.PatternClassNode.create(this._getOwnerKey(), classNameExpr, args);
|
|
793
821
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
|
794
822
|
this._addSyntaxError(localize_1.LocMessage.expectedCloseParen(), openParenToken);
|
|
795
823
|
// Consume the remainder of tokens on the line for error
|
|
@@ -808,10 +836,10 @@ class Parser {
|
|
|
808
836
|
const identifierToken = this._getTokenIfIdentifier();
|
|
809
837
|
if (!identifierToken) {
|
|
810
838
|
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
|
811
|
-
return parseNodes_1.ErrorNode.create(starToken, 2 /* ErrorExpressionCategory.MissingExpression */);
|
|
839
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), starToken, 2 /* ErrorExpressionCategory.MissingExpression */);
|
|
812
840
|
}
|
|
813
841
|
else {
|
|
814
|
-
return parseNodes_1.PatternCaptureNode.create(parseNodes_1.NameNode.create(identifierToken), starToken);
|
|
842
|
+
return parseNodes_1.PatternCaptureNode.create(this._getOwnerKey(), parseNodes_1.NameNode.create(this._getOwnerKey(), identifierToken), starToken);
|
|
815
843
|
}
|
|
816
844
|
}
|
|
817
845
|
if (nextToken.type === 13 /* TokenType.OpenParenthesis */ || nextToken.type === 15 /* TokenType.OpenBracket */) {
|
|
@@ -826,7 +854,7 @@ class Parser {
|
|
|
826
854
|
startToken.type === 13 /* TokenType.OpenParenthesis */) {
|
|
827
855
|
const pattern = patternList.list[0].d.orPatterns[0];
|
|
828
856
|
if (pattern.nodeType === 69 /* ParseNodeType.PatternCapture */ && pattern.d.isStar) {
|
|
829
|
-
casePattern = parseNodes_1.PatternSequenceNode.create(startToken, patternList.list);
|
|
857
|
+
casePattern = parseNodes_1.PatternSequenceNode.create(this._getOwnerKey(), startToken, patternList.list);
|
|
830
858
|
}
|
|
831
859
|
else {
|
|
832
860
|
casePattern = patternList.list[0];
|
|
@@ -834,7 +862,7 @@ class Parser {
|
|
|
834
862
|
(0, parseNodes_1.extendRange)(casePattern, nextToken);
|
|
835
863
|
}
|
|
836
864
|
else {
|
|
837
|
-
casePattern = parseNodes_1.PatternSequenceNode.create(startToken, patternList.list);
|
|
865
|
+
casePattern = parseNodes_1.PatternSequenceNode.create(this._getOwnerKey(), startToken, patternList.list);
|
|
838
866
|
}
|
|
839
867
|
const endToken = this._peekToken();
|
|
840
868
|
if (this._consumeTokenIfType(nextToken.type === 13 /* TokenType.OpenParenthesis */ ? 14 /* TokenType.CloseParenthesis */ : 16 /* TokenType.CloseBracket */)) {
|
|
@@ -905,12 +933,12 @@ class Parser {
|
|
|
905
933
|
secondToken.operatorType === 2 /* OperatorType.Assign */) {
|
|
906
934
|
const classNameToken = this._getTokenIfIdentifier();
|
|
907
935
|
if (classNameToken !== undefined) {
|
|
908
|
-
keywordName = parseNodes_1.NameNode.create(classNameToken);
|
|
936
|
+
keywordName = parseNodes_1.NameNode.create(this._getOwnerKey(), classNameToken);
|
|
909
937
|
this._getNextToken();
|
|
910
938
|
}
|
|
911
939
|
}
|
|
912
940
|
const pattern = this._parsePatternAs();
|
|
913
|
-
return parseNodes_1.PatternClassArgumentNode.create(pattern, keywordName);
|
|
941
|
+
return parseNodes_1.PatternClassArgumentNode.create(this._getOwnerKey(), pattern, keywordName);
|
|
914
942
|
}
|
|
915
943
|
// literal_pattern:
|
|
916
944
|
// | signed_number
|
|
@@ -935,14 +963,14 @@ class Parser {
|
|
|
935
963
|
this._addSyntaxError(localize_1.LocMessage.formatStringInPattern(), stringAtom);
|
|
936
964
|
}
|
|
937
965
|
});
|
|
938
|
-
return parseNodes_1.PatternLiteralNode.create(stringList);
|
|
966
|
+
return parseNodes_1.PatternLiteralNode.create(this._getOwnerKey(), stringList);
|
|
939
967
|
}
|
|
940
968
|
if (nextToken.type === 8 /* TokenType.Keyword */) {
|
|
941
969
|
const keywordToken = nextToken;
|
|
942
970
|
if (keywordToken.keywordType === 15 /* KeywordType.False */ ||
|
|
943
971
|
keywordToken.keywordType === 34 /* KeywordType.True */ ||
|
|
944
972
|
keywordToken.keywordType === 27 /* KeywordType.None */) {
|
|
945
|
-
return parseNodes_1.PatternLiteralNode.create(this._parseAtom());
|
|
973
|
+
return parseNodes_1.PatternLiteralNode.create(this._getOwnerKey(), this._parseAtom());
|
|
946
974
|
}
|
|
947
975
|
}
|
|
948
976
|
return undefined;
|
|
@@ -978,7 +1006,7 @@ class Parser {
|
|
|
978
1006
|
this._addSyntaxError(localize_1.LocMessage.expectedComplexNumberLiteral(), expression);
|
|
979
1007
|
}
|
|
980
1008
|
}
|
|
981
|
-
return parseNodes_1.PatternLiteralNode.create(expression);
|
|
1009
|
+
return parseNodes_1.PatternLiteralNode.create(this._getOwnerKey(), expression);
|
|
982
1010
|
}
|
|
983
1011
|
_parsePatternMapping(firstToken) {
|
|
984
1012
|
const itemList = this._parseExpressionListGeneric(() => this._parsePatternMappingItem());
|
|
@@ -988,9 +1016,10 @@ class Parser {
|
|
|
988
1016
|
if (starStarEntries.length > 1) {
|
|
989
1017
|
this._addSyntaxError(localize_1.LocMessage.duplicateStarStarPattern(), starStarEntries[1]);
|
|
990
1018
|
}
|
|
991
|
-
return parseNodes_1.PatternMappingNode.create(firstToken, itemList.list);
|
|
1019
|
+
return parseNodes_1.PatternMappingNode.create(this._getOwnerKey(), firstToken, itemList.list);
|
|
992
1020
|
}
|
|
993
|
-
return itemList.parseError ||
|
|
1021
|
+
return (itemList.parseError ||
|
|
1022
|
+
parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */));
|
|
994
1023
|
}
|
|
995
1024
|
// key_value_pattern:
|
|
996
1025
|
// | (literal_pattern | attr) ':' as_pattern
|
|
@@ -1002,13 +1031,13 @@ class Parser {
|
|
|
1002
1031
|
const identifierToken = this._getTokenIfIdentifier();
|
|
1003
1032
|
if (!identifierToken) {
|
|
1004
1033
|
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
|
1005
|
-
return parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1034
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1006
1035
|
}
|
|
1007
|
-
const nameNode = parseNodes_1.NameNode.create(identifierToken);
|
|
1036
|
+
const nameNode = parseNodes_1.NameNode.create(this._getOwnerKey(), identifierToken);
|
|
1008
1037
|
if (identifierToken.value === '_') {
|
|
1009
1038
|
this._addSyntaxError(localize_1.LocMessage.starStarWildcardNotAllowed(), nameNode);
|
|
1010
1039
|
}
|
|
1011
|
-
return parseNodes_1.PatternMappingExpandEntryNode.create(doubleStar, nameNode);
|
|
1040
|
+
return parseNodes_1.PatternMappingExpandEntryNode.create(this._getOwnerKey(), doubleStar, nameNode);
|
|
1012
1041
|
}
|
|
1013
1042
|
const patternLiteral = this._parsePatternLiteral();
|
|
1014
1043
|
if (patternLiteral) {
|
|
@@ -1022,23 +1051,23 @@ class Parser {
|
|
|
1022
1051
|
}
|
|
1023
1052
|
else {
|
|
1024
1053
|
this._addSyntaxError(localize_1.LocMessage.expectedPatternValue(), patternCaptureOrValue);
|
|
1025
|
-
keyExpression = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1054
|
+
keyExpression = parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1026
1055
|
}
|
|
1027
1056
|
}
|
|
1028
1057
|
}
|
|
1029
1058
|
if (!keyExpression) {
|
|
1030
1059
|
this._addSyntaxError(localize_1.LocMessage.expectedPatternExpr(), this._peekToken());
|
|
1031
|
-
keyExpression = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1060
|
+
keyExpression = parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1032
1061
|
}
|
|
1033
1062
|
let valuePattern;
|
|
1034
1063
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
|
1035
1064
|
this._addSyntaxError(localize_1.LocMessage.expectedColon(), this._peekToken());
|
|
1036
|
-
valuePattern = parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1065
|
+
valuePattern = parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1037
1066
|
}
|
|
1038
1067
|
else {
|
|
1039
1068
|
valuePattern = this._parsePatternAs();
|
|
1040
1069
|
}
|
|
1041
|
-
return parseNodes_1.PatternMappingKeyEntryNode.create(keyExpression, valuePattern);
|
|
1070
|
+
return parseNodes_1.PatternMappingKeyEntryNode.create(this._getOwnerKey(), keyExpression, valuePattern);
|
|
1042
1071
|
}
|
|
1043
1072
|
_parsePatternCaptureOrValue() {
|
|
1044
1073
|
const nextToken = this._peekToken();
|
|
@@ -1047,8 +1076,10 @@ class Parser {
|
|
|
1047
1076
|
while (true) {
|
|
1048
1077
|
const identifierToken = this._getTokenIfIdentifier();
|
|
1049
1078
|
if (identifierToken) {
|
|
1050
|
-
const nameNode = parseNodes_1.NameNode.create(identifierToken);
|
|
1051
|
-
nameOrMember = nameOrMember
|
|
1079
|
+
const nameNode = parseNodes_1.NameNode.create(this._getOwnerKey(), identifierToken);
|
|
1080
|
+
nameOrMember = nameOrMember
|
|
1081
|
+
? parseNodes_1.MemberAccessNode.create(this._getOwnerKey(), nameOrMember, nameNode)
|
|
1082
|
+
: nameNode;
|
|
1052
1083
|
}
|
|
1053
1084
|
else {
|
|
1054
1085
|
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
|
@@ -1060,12 +1091,12 @@ class Parser {
|
|
|
1060
1091
|
}
|
|
1061
1092
|
if (!nameOrMember) {
|
|
1062
1093
|
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
|
1063
|
-
return parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1094
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
|
|
1064
1095
|
}
|
|
1065
1096
|
if (nameOrMember.nodeType === 35 /* ParseNodeType.MemberAccess */) {
|
|
1066
|
-
return parseNodes_1.PatternValueNode.create(nameOrMember);
|
|
1097
|
+
return parseNodes_1.PatternValueNode.create(this._getOwnerKey(), nameOrMember);
|
|
1067
1098
|
}
|
|
1068
|
-
return parseNodes_1.PatternCaptureNode.create(nameOrMember);
|
|
1099
|
+
return parseNodes_1.PatternCaptureNode.create(this._getOwnerKey(), nameOrMember);
|
|
1069
1100
|
}
|
|
1070
1101
|
return undefined;
|
|
1071
1102
|
}
|
|
@@ -1076,7 +1107,7 @@ class Parser {
|
|
|
1076
1107
|
const ifOrElifToken = this._getKeywordToken(keywordType);
|
|
1077
1108
|
const test = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
1078
1109
|
const suite = this._parseSuite(this._isInFunction);
|
|
1079
|
-
const ifNode = parseNodes_1.IfNode.create(ifOrElifToken, test, suite);
|
|
1110
|
+
const ifNode = parseNodes_1.IfNode.create(this._getOwnerKey(), ifOrElifToken, test, suite);
|
|
1080
1111
|
if (this._consumeTokenIfKeyword(13 /* KeywordType.Else */)) {
|
|
1081
1112
|
ifNode.d.elseSuite = this._parseSuite(this._isInFunction);
|
|
1082
1113
|
ifNode.d.elseSuite.parent = ifNode;
|
|
@@ -1127,7 +1158,7 @@ class Parser {
|
|
|
1127
1158
|
// suite: ':' (simple_stmt | NEWLINE INDENT stmt+ DEDENT)
|
|
1128
1159
|
_parseSuite(isFunction = false, skipBody = false, postColonCallback) {
|
|
1129
1160
|
const nextToken = this._peekToken();
|
|
1130
|
-
const suite = parseNodes_1.SuiteNode.create(nextToken);
|
|
1161
|
+
const suite = parseNodes_1.SuiteNode.create(this._getOwnerKey(), nextToken);
|
|
1131
1162
|
if (!this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
|
1132
1163
|
this._addSyntaxError(localize_1.LocMessage.expectedColon(), nextToken);
|
|
1133
1164
|
// Try to perform parse recovery by consuming tokens.
|
|
@@ -1193,6 +1224,31 @@ class Parser {
|
|
|
1193
1224
|
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), bodyIndentToken);
|
|
1194
1225
|
}
|
|
1195
1226
|
while (true) {
|
|
1227
|
+
// In notebook mode, an IPython magic or shell-escape line is consumed into a
|
|
1228
|
+
// comment, which can leave a bare NewLine token at the start of a suite body.
|
|
1229
|
+
// Skip such blank lines like the module-level loop does so they aren't misparsed
|
|
1230
|
+
// as an empty statement (which would report a spurious "expected expression").
|
|
1231
|
+
if (this._parseOptions.useNotebookMode && this._peekTokenType() === 2 /* TokenType.NewLine */) {
|
|
1232
|
+
this._getNextToken();
|
|
1233
|
+
// If the magic/blank line(s) were the entire suite body, this is a valid empty
|
|
1234
|
+
// suite. Report any indentation inconsistency on the terminating dedent (shared
|
|
1235
|
+
// with the normal dedent branch below via _reportDedentInconsistencies), then consume
|
|
1236
|
+
// the dedent so it doesn't bubble up to the enclosing scope (which would otherwise
|
|
1237
|
+
// report a spurious "unindent not expected"). Unlike the normal dedent branch,
|
|
1238
|
+
// which leaves an empty suite's dedent unconsumed for multi-level recovery, a
|
|
1239
|
+
// magic-only suite is a valid empty suite and consumes its own dedent here.
|
|
1240
|
+
if (this._peekTokenType() === 4 /* TokenType.Dedent */ && suite.d.statements.length === 0) {
|
|
1241
|
+
const dedentToken = this._peekToken();
|
|
1242
|
+
this._reportDedentInconsistencies(dedentToken);
|
|
1243
|
+
this._getNextToken();
|
|
1244
|
+
(0, parseNodes_1.extendRange)(suite, dedentToken);
|
|
1245
|
+
break;
|
|
1246
|
+
}
|
|
1247
|
+
if (this._peekTokenType() === 1 /* TokenType.EndOfStream */) {
|
|
1248
|
+
break;
|
|
1249
|
+
}
|
|
1250
|
+
continue;
|
|
1251
|
+
}
|
|
1196
1252
|
// Handle a common error here and see if we can recover.
|
|
1197
1253
|
const nextToken = this._peekToken();
|
|
1198
1254
|
if (nextToken.type === 3 /* TokenType.Indent */) {
|
|
@@ -1208,12 +1264,7 @@ class Parser {
|
|
|
1208
1264
|
else if (nextToken.type === 4 /* TokenType.Dedent */) {
|
|
1209
1265
|
// When we see a dedent, stop before parsing the dedented statement.
|
|
1210
1266
|
const dedentToken = nextToken;
|
|
1211
|
-
|
|
1212
|
-
this._addSyntaxError(localize_1.LocMessage.inconsistentIndent(), dedentToken);
|
|
1213
|
-
}
|
|
1214
|
-
if (dedentToken.isDedentAmbiguous) {
|
|
1215
|
-
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), dedentToken);
|
|
1216
|
-
}
|
|
1267
|
+
this._reportDedentInconsistencies(dedentToken);
|
|
1217
1268
|
// When the suite is incomplete (no statements), leave the dedent token for
|
|
1218
1269
|
// recovery. This allows a single dedent token to cause us to break out of
|
|
1219
1270
|
// multiple levels of nested suites. Also extend the suite's range in this
|
|
@@ -1265,6 +1316,17 @@ class Parser {
|
|
|
1265
1316
|
this._isInFunction = wasFunction;
|
|
1266
1317
|
return suite;
|
|
1267
1318
|
}
|
|
1319
|
+
// Reports indentation inconsistencies (inconsistent indent / ambiguous tabs) for a terminating
|
|
1320
|
+
// dedent token. Shared by _parseSuite's notebook-mode empty-suite branch and its normal dedent
|
|
1321
|
+
// branch so the two sites can't drift apart.
|
|
1322
|
+
_reportDedentInconsistencies(dedentToken) {
|
|
1323
|
+
if (!dedentToken.matchesIndent) {
|
|
1324
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentIndent(), dedentToken);
|
|
1325
|
+
}
|
|
1326
|
+
if (dedentToken.isDedentAmbiguous) {
|
|
1327
|
+
this._addSyntaxError(localize_1.LocMessage.inconsistentTabs(), dedentToken);
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1268
1330
|
// for_stmt: [async] 'for' exprlist 'in' testlist suite ['else' suite]
|
|
1269
1331
|
_parseForStatement(asyncToken) {
|
|
1270
1332
|
const forToken = this._getKeywordToken(17 /* KeywordType.For */);
|
|
@@ -1274,7 +1336,7 @@ class Parser {
|
|
|
1274
1336
|
let elseSuite;
|
|
1275
1337
|
if (!this._consumeTokenIfKeyword(22 /* KeywordType.In */)) {
|
|
1276
1338
|
seqExpr = this._handleExpressionParseError(0 /* ErrorExpressionCategory.MissingIn */, localize_1.LocMessage.expectedIn());
|
|
1277
|
-
forSuite = parseNodes_1.SuiteNode.create(this._peekToken());
|
|
1339
|
+
forSuite = parseNodes_1.SuiteNode.create(this._getOwnerKey(), textRange_1.TextRange.create(this._peekToken().start, /* length */ 0));
|
|
1278
1340
|
}
|
|
1279
1341
|
else {
|
|
1280
1342
|
seqExpr = this._parseTestOrStarListAsExpression(
|
|
@@ -1299,7 +1361,7 @@ class Parser {
|
|
|
1299
1361
|
elseSuite = this._parseSuite(this._isInFunction);
|
|
1300
1362
|
}
|
|
1301
1363
|
}
|
|
1302
|
-
const forNode = parseNodes_1.ForNode.create(forToken, targetExpr, seqExpr, forSuite);
|
|
1364
|
+
const forNode = parseNodes_1.ForNode.create(this._getOwnerKey(), forToken, targetExpr, seqExpr, forSuite);
|
|
1303
1365
|
forNode.d.elseSuite = elseSuite;
|
|
1304
1366
|
if (elseSuite) {
|
|
1305
1367
|
(0, parseNodes_1.extendRange)(forNode, elseSuite);
|
|
@@ -1327,7 +1389,7 @@ class Parser {
|
|
|
1327
1389
|
else if (target.nodeType === 19 /* ParseNodeType.DictionaryExpandEntry */) {
|
|
1328
1390
|
this._addSyntaxError(localize_1.LocMessage.dictExpandIllegalInComprehension(), target);
|
|
1329
1391
|
}
|
|
1330
|
-
const compNode = parseNodes_1.ComprehensionNode.create(target, isGenerator);
|
|
1392
|
+
const compNode = parseNodes_1.ComprehensionNode.create(this._getOwnerKey(), target, isGenerator);
|
|
1331
1393
|
const forIfList = [compFor];
|
|
1332
1394
|
while (true) {
|
|
1333
1395
|
const compIter = this._tryParseCompForStatement() || this._tryParseCompIfStatement();
|
|
@@ -1373,7 +1435,7 @@ class Parser {
|
|
|
1373
1435
|
seqExpr = this._parseOrTest();
|
|
1374
1436
|
});
|
|
1375
1437
|
}
|
|
1376
|
-
const compForNode = parseNodes_1.ComprehensionForNode.create(asyncToken || forToken, targetExpr, seqExpr);
|
|
1438
|
+
const compForNode = parseNodes_1.ComprehensionForNode.create(this._getOwnerKey(), asyncToken || forToken, targetExpr, seqExpr);
|
|
1377
1439
|
if (asyncToken) {
|
|
1378
1440
|
compForNode.d.isAsync = true;
|
|
1379
1441
|
compForNode.d.asyncToken = asyncToken;
|
|
@@ -1389,13 +1451,13 @@ class Parser {
|
|
|
1389
1451
|
const ifToken = this._getKeywordToken(20 /* KeywordType.If */);
|
|
1390
1452
|
const ifExpr = this._tryParseLambdaExpression() ||
|
|
1391
1453
|
this._parseAssignmentExpression(/* disallowAssignmentExpression */ true);
|
|
1392
|
-
const compIfNode = parseNodes_1.ComprehensionIfNode.create(ifToken, ifExpr);
|
|
1454
|
+
const compIfNode = parseNodes_1.ComprehensionIfNode.create(this._getOwnerKey(), ifToken, ifExpr);
|
|
1393
1455
|
return compIfNode;
|
|
1394
1456
|
}
|
|
1395
1457
|
// while_stmt: 'while' test suite ['else' suite]
|
|
1396
1458
|
_parseWhileStatement() {
|
|
1397
1459
|
const whileToken = this._getKeywordToken(37 /* KeywordType.While */);
|
|
1398
|
-
const whileNode = parseNodes_1.WhileNode.create(whileToken, this._parseTestExpression(/* allowAssignmentExpression */ true), this._parseLoopSuite());
|
|
1460
|
+
const whileNode = parseNodes_1.WhileNode.create(this._getOwnerKey(), whileToken, this._parseTestExpression(/* allowAssignmentExpression */ true), this._parseLoopSuite());
|
|
1399
1461
|
if (this._consumeTokenIfKeyword(13 /* KeywordType.Else */)) {
|
|
1400
1462
|
whileNode.d.elseSuite = this._parseSuite(this._isInFunction);
|
|
1401
1463
|
whileNode.d.elseSuite.parent = whileNode;
|
|
@@ -1412,7 +1474,7 @@ class Parser {
|
|
|
1412
1474
|
_parseTryStatement() {
|
|
1413
1475
|
const tryToken = this._getKeywordToken(35 /* KeywordType.Try */);
|
|
1414
1476
|
const trySuite = this._parseSuite(this._isInFunction);
|
|
1415
|
-
const tryNode = parseNodes_1.TryNode.create(tryToken, trySuite);
|
|
1477
|
+
const tryNode = parseNodes_1.TryNode.create(this._getOwnerKey(), tryToken, trySuite);
|
|
1416
1478
|
let sawCatchAllExcept = false;
|
|
1417
1479
|
let reportedExceptGroupMismatch = false;
|
|
1418
1480
|
while (true) {
|
|
@@ -1484,13 +1546,13 @@ class Parser {
|
|
|
1484
1546
|
}
|
|
1485
1547
|
}
|
|
1486
1548
|
const exceptSuite = this._parseExceptSuite(isExceptGroup, () => this._parseSuite(this._isInFunction));
|
|
1487
|
-
const exceptNode = parseNodes_1.ExceptNode.create(exceptToken, exceptSuite, isExceptGroup);
|
|
1549
|
+
const exceptNode = parseNodes_1.ExceptNode.create(this._getOwnerKey(), exceptToken, exceptSuite, isExceptGroup);
|
|
1488
1550
|
if (typeExpr) {
|
|
1489
1551
|
exceptNode.d.typeExpr = typeExpr;
|
|
1490
1552
|
exceptNode.d.typeExpr.parent = exceptNode;
|
|
1491
1553
|
}
|
|
1492
1554
|
if (symbolName) {
|
|
1493
|
-
exceptNode.d.name = parseNodes_1.NameNode.create(symbolName);
|
|
1555
|
+
exceptNode.d.name = parseNodes_1.NameNode.create(this._getOwnerKey(), symbolName);
|
|
1494
1556
|
exceptNode.d.name.parent = exceptNode;
|
|
1495
1557
|
}
|
|
1496
1558
|
tryNode.d.exceptClauses.push(exceptNode);
|
|
@@ -1527,7 +1589,7 @@ class Parser {
|
|
|
1527
1589
|
const nameToken = this._getTokenIfIdentifier();
|
|
1528
1590
|
if (!nameToken) {
|
|
1529
1591
|
this._addSyntaxError(localize_1.LocMessage.expectedFunctionName(), defToken);
|
|
1530
|
-
return parseNodes_1.ErrorNode.create(defToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, undefined, decorators);
|
|
1592
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), defToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, undefined, decorators);
|
|
1531
1593
|
}
|
|
1532
1594
|
let typeParameters;
|
|
1533
1595
|
const possibleOpenBracket = this._peekToken();
|
|
@@ -1541,7 +1603,7 @@ class Parser {
|
|
|
1541
1603
|
const openParenToken = this._peekToken();
|
|
1542
1604
|
if (!this._consumeTokenIfType(13 /* TokenType.OpenParenthesis */)) {
|
|
1543
1605
|
this._addSyntaxError(localize_1.LocMessage.expectedOpenParen(), this._peekToken());
|
|
1544
|
-
return parseNodes_1.ErrorNode.create(nameToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, parseNodes_1.NameNode.create(nameToken), decorators);
|
|
1606
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), nameToken, 10 /* ErrorExpressionCategory.MissingFunctionParameterList */, parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken), decorators);
|
|
1545
1607
|
}
|
|
1546
1608
|
const paramList = this._parseVarArgsList(14 /* TokenType.CloseParenthesis */, /* allowAnnotations */ true);
|
|
1547
1609
|
if (!this._consumeTokenIfType(14 /* TokenType.CloseParenthesis */)) {
|
|
@@ -1567,7 +1629,7 @@ class Parser {
|
|
|
1567
1629
|
this._isInExceptionGroup = wasInExceptionGroup;
|
|
1568
1630
|
this._isInFinallyBlock = wasInFinallyBlock;
|
|
1569
1631
|
this._isInFinallyLoop = wasInFinallyLoop;
|
|
1570
|
-
const functionNode = parseNodes_1.FunctionNode.create(defToken, parseNodes_1.NameNode.create(nameToken), suite, typeParameters);
|
|
1632
|
+
const functionNode = parseNodes_1.FunctionNode.create(this._getOwnerKey(), defToken, parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken), suite, typeParameters);
|
|
1571
1633
|
if (asyncToken) {
|
|
1572
1634
|
functionNode.d.isAsync = true;
|
|
1573
1635
|
(0, parseNodes_1.extendRange)(functionNode, asyncToken);
|
|
@@ -1744,11 +1806,11 @@ class Parser {
|
|
|
1744
1806
|
const paramName = this._getTokenIfIdentifier();
|
|
1745
1807
|
if (!paramName) {
|
|
1746
1808
|
if (starCount === 1) {
|
|
1747
|
-
const paramNode = parseNodes_1.ParameterNode.create(firstToken, 1 /* ParamCategory.ArgsList */);
|
|
1809
|
+
const paramNode = parseNodes_1.ParameterNode.create(this._getOwnerKey(), firstToken, 1 /* ParamCategory.ArgsList */);
|
|
1748
1810
|
return paramNode;
|
|
1749
1811
|
}
|
|
1750
1812
|
else if (slashCount === 1) {
|
|
1751
|
-
const paramNode = parseNodes_1.ParameterNode.create(firstToken, 0 /* ParamCategory.Simple */);
|
|
1813
|
+
const paramNode = parseNodes_1.ParameterNode.create(this._getOwnerKey(), firstToken, 0 /* ParamCategory.Simple */);
|
|
1752
1814
|
return paramNode;
|
|
1753
1815
|
}
|
|
1754
1816
|
// Check for the Python 2.x parameter sublist syntax and handle it gracefully.
|
|
@@ -1770,9 +1832,9 @@ class Parser {
|
|
|
1770
1832
|
else if (starCount === 2) {
|
|
1771
1833
|
paramType = 2 /* ParamCategory.KwargsDict */;
|
|
1772
1834
|
}
|
|
1773
|
-
const paramNode = parseNodes_1.ParameterNode.create(firstToken, paramType);
|
|
1835
|
+
const paramNode = parseNodes_1.ParameterNode.create(this._getOwnerKey(), firstToken, paramType);
|
|
1774
1836
|
if (paramName) {
|
|
1775
|
-
paramNode.d.name = parseNodes_1.NameNode.create(paramName);
|
|
1837
|
+
paramNode.d.name = parseNodes_1.NameNode.create(this._getOwnerKey(), paramName);
|
|
1776
1838
|
paramNode.d.name.parent = paramNode;
|
|
1777
1839
|
(0, parseNodes_1.extendRange)(paramNode, paramName);
|
|
1778
1840
|
}
|
|
@@ -1855,7 +1917,7 @@ class Parser {
|
|
|
1855
1917
|
typeComment = comment;
|
|
1856
1918
|
}
|
|
1857
1919
|
});
|
|
1858
|
-
const withNode = parseNodes_1.WithNode.create(withToken, withSuite);
|
|
1920
|
+
const withNode = parseNodes_1.WithNode.create(this._getOwnerKey(), withToken, withSuite);
|
|
1859
1921
|
if (asyncToken) {
|
|
1860
1922
|
withNode.d.isAsync = true;
|
|
1861
1923
|
withNode.d.asyncToken = asyncToken;
|
|
@@ -1873,7 +1935,7 @@ class Parser {
|
|
|
1873
1935
|
// with_item: test ['as' expr]
|
|
1874
1936
|
_parseWithItem() {
|
|
1875
1937
|
const expr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
1876
|
-
const itemNode = parseNodes_1.WithItemNode.create(expr);
|
|
1938
|
+
const itemNode = parseNodes_1.WithItemNode.create(this._getOwnerKey(), expr);
|
|
1877
1939
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
|
1878
1940
|
itemNode.d.target = this._parseExpression(/* allowUnpack */ false);
|
|
1879
1941
|
itemNode.d.target.parent = itemNode;
|
|
@@ -1914,7 +1976,7 @@ class Parser {
|
|
|
1914
1976
|
this._addSyntaxError(localize_1.LocMessage.expectedAfterDecorator(), this._peekToken());
|
|
1915
1977
|
// Return a dummy class declaration so the completion provider has
|
|
1916
1978
|
// some parse nodes to work with.
|
|
1917
|
-
return parseNodes_1.ClassNode.createDummyForDecorators(decoratorList);
|
|
1979
|
+
return parseNodes_1.ClassNode.createDummyForDecorators(this._getOwnerKey(), decoratorList);
|
|
1918
1980
|
}
|
|
1919
1981
|
// decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
|
|
1920
1982
|
_parseDecorator() {
|
|
@@ -1936,7 +1998,7 @@ class Parser {
|
|
|
1936
1998
|
this._addSyntaxError(localize_1.LocMessage.expectedDecoratorExpr(), expression);
|
|
1937
1999
|
}
|
|
1938
2000
|
}
|
|
1939
|
-
const decoratorNode = parseNodes_1.DecoratorNode.create(atOperator, expression);
|
|
2001
|
+
const decoratorNode = parseNodes_1.DecoratorNode.create(this._getOwnerKey(), atOperator, expression);
|
|
1940
2002
|
if (!this._consumeTokenIfType(2 /* TokenType.NewLine */)) {
|
|
1941
2003
|
this._addSyntaxError(localize_1.LocMessage.expectedDecoratorNewline(), this._peekToken());
|
|
1942
2004
|
this._consumeTokensUntilType([2 /* TokenType.NewLine */]);
|
|
@@ -1978,7 +2040,7 @@ class Parser {
|
|
|
1978
2040
|
}
|
|
1979
2041
|
}
|
|
1980
2042
|
const suite = this._parseSuite(/* isFunction */ false, this._parseOptions.skipFunctionAndClassBody);
|
|
1981
|
-
const classNode = parseNodes_1.ClassNode.create(classToken, parseNodes_1.NameNode.create(nameToken), suite, typeParameters);
|
|
2043
|
+
const classNode = parseNodes_1.ClassNode.create(this._getOwnerKey(), classToken, parseNodes_1.NameNode.create(this._getOwnerKey(), nameToken), suite, typeParameters);
|
|
1982
2044
|
classNode.d.arguments = argList;
|
|
1983
2045
|
argList.forEach((arg) => {
|
|
1984
2046
|
arg.parent = classNode;
|
|
@@ -1995,7 +2057,7 @@ class Parser {
|
|
|
1995
2057
|
return classNode;
|
|
1996
2058
|
}
|
|
1997
2059
|
_parsePassStatement() {
|
|
1998
|
-
return parseNodes_1.PassNode.create(this._getKeywordToken(31 /* KeywordType.Pass */));
|
|
2060
|
+
return parseNodes_1.PassNode.create(this._getOwnerKey(), this._getKeywordToken(31 /* KeywordType.Pass */));
|
|
1999
2061
|
}
|
|
2000
2062
|
_parseBreakStatement() {
|
|
2001
2063
|
const breakToken = this._getKeywordToken(5 /* KeywordType.Break */);
|
|
@@ -2008,7 +2070,7 @@ class Parser {
|
|
|
2008
2070
|
if (this._isInFinallyLoop && pythonVersion_1.PythonVersion.isGreaterOrEqualTo(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
2009
2071
|
this._addSyntaxError(localize_1.LocMessage.finallyBreak(), breakToken);
|
|
2010
2072
|
}
|
|
2011
|
-
return parseNodes_1.BreakNode.create(breakToken);
|
|
2073
|
+
return parseNodes_1.BreakNode.create(this._getOwnerKey(), breakToken);
|
|
2012
2074
|
}
|
|
2013
2075
|
_parseContinueStatement() {
|
|
2014
2076
|
const continueToken = this._getKeywordToken(8 /* KeywordType.Continue */);
|
|
@@ -2021,12 +2083,12 @@ class Parser {
|
|
|
2021
2083
|
if (this._isInFinallyLoop && pythonVersion_1.PythonVersion.isGreaterOrEqualTo(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_14)) {
|
|
2022
2084
|
this._addSyntaxError(localize_1.LocMessage.finallyContinue(), continueToken);
|
|
2023
2085
|
}
|
|
2024
|
-
return parseNodes_1.ContinueNode.create(continueToken);
|
|
2086
|
+
return parseNodes_1.ContinueNode.create(this._getOwnerKey(), continueToken);
|
|
2025
2087
|
}
|
|
2026
2088
|
// return_stmt: 'return' [testlist]
|
|
2027
2089
|
_parseReturnStatement() {
|
|
2028
2090
|
const returnToken = this._getKeywordToken(33 /* KeywordType.Return */);
|
|
2029
|
-
const returnNode = parseNodes_1.ReturnNode.create(returnToken);
|
|
2091
|
+
const returnNode = parseNodes_1.ReturnNode.create(this._getOwnerKey(), returnToken);
|
|
2030
2092
|
if (!this._isInFunction) {
|
|
2031
2093
|
this._addSyntaxError(localize_1.LocMessage.returnOutsideFunction(), returnToken);
|
|
2032
2094
|
}
|
|
@@ -2054,7 +2116,7 @@ class Parser {
|
|
|
2054
2116
|
_parseFromStatement() {
|
|
2055
2117
|
const fromToken = this._getKeywordToken(18 /* KeywordType.From */);
|
|
2056
2118
|
const modName = this._parseDottedModuleName(/* allowJustDots */ true);
|
|
2057
|
-
const importFromNode = parseNodes_1.ImportFromNode.create(fromToken, modName);
|
|
2119
|
+
const importFromNode = parseNodes_1.ImportFromNode.create(this._getOwnerKey(), fromToken, modName);
|
|
2058
2120
|
// Handle imports from __future__ specially because they can
|
|
2059
2121
|
// change the way we interpret the rest of the file.
|
|
2060
2122
|
const isFutureImport = modName.d.leadingDots === 0 &&
|
|
@@ -2087,14 +2149,14 @@ class Parser {
|
|
|
2087
2149
|
break;
|
|
2088
2150
|
}
|
|
2089
2151
|
trailingCommaToken = undefined;
|
|
2090
|
-
const importFromAsNode = parseNodes_1.ImportFromAsNode.create(parseNodes_1.NameNode.create(importName));
|
|
2152
|
+
const importFromAsNode = parseNodes_1.ImportFromAsNode.create(this._getOwnerKey(), parseNodes_1.NameNode.create(this._getOwnerKey(), importName));
|
|
2091
2153
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
|
2092
2154
|
const aliasName = this._getTokenIfIdentifier();
|
|
2093
2155
|
if (!aliasName) {
|
|
2094
2156
|
this._addSyntaxError(localize_1.LocMessage.expectedImportAlias(), this._peekToken());
|
|
2095
2157
|
}
|
|
2096
2158
|
else {
|
|
2097
|
-
importFromAsNode.d.alias = parseNodes_1.NameNode.create(aliasName);
|
|
2159
|
+
importFromAsNode.d.alias = parseNodes_1.NameNode.create(this._getOwnerKey(), aliasName);
|
|
2098
2160
|
importFromAsNode.d.alias.parent = importFromAsNode;
|
|
2099
2161
|
(0, parseNodes_1.extendRange)(importFromAsNode, aliasName);
|
|
2100
2162
|
}
|
|
@@ -2165,14 +2227,14 @@ class Parser {
|
|
|
2165
2227
|
// dotted_as_name: dotted_name ['as' NAME]
|
|
2166
2228
|
_parseImportStatement() {
|
|
2167
2229
|
const importToken = this._getKeywordToken(21 /* KeywordType.Import */);
|
|
2168
|
-
const importNode = parseNodes_1.ImportNode.create(importToken);
|
|
2230
|
+
const importNode = parseNodes_1.ImportNode.create(this._getOwnerKey(), importToken);
|
|
2169
2231
|
while (true) {
|
|
2170
2232
|
const modName = this._parseDottedModuleName();
|
|
2171
|
-
const importAsNode = parseNodes_1.ImportAsNode.create(modName);
|
|
2233
|
+
const importAsNode = parseNodes_1.ImportAsNode.create(this._getOwnerKey(), modName);
|
|
2172
2234
|
if (this._consumeTokenIfKeyword(1 /* KeywordType.As */)) {
|
|
2173
2235
|
const aliasToken = this._getTokenIfIdentifier();
|
|
2174
2236
|
if (aliasToken) {
|
|
2175
|
-
importAsNode.d.alias = parseNodes_1.NameNode.create(aliasToken);
|
|
2237
|
+
importAsNode.d.alias = parseNodes_1.NameNode.create(this._getOwnerKey(), aliasToken);
|
|
2176
2238
|
importAsNode.d.alias.parent = importAsNode;
|
|
2177
2239
|
(0, parseNodes_1.extendRange)(importAsNode, importAsNode.d.alias);
|
|
2178
2240
|
}
|
|
@@ -2226,7 +2288,7 @@ class Parser {
|
|
|
2226
2288
|
// ('.' | '...')* dotted_name | ('.' | '...')+
|
|
2227
2289
|
// dotted_name: NAME ('.' NAME)*
|
|
2228
2290
|
_parseDottedModuleName(allowJustDots = false) {
|
|
2229
|
-
const moduleNameNode = parseNodes_1.ModuleNameNode.create(this._peekToken());
|
|
2291
|
+
const moduleNameNode = parseNodes_1.ModuleNameNode.create(this._getOwnerKey(), this._peekToken());
|
|
2230
2292
|
while (true) {
|
|
2231
2293
|
const token = this._getTokenIfType(19 /* TokenType.Ellipsis */) ?? this._getTokenIfType(20 /* TokenType.Dot */);
|
|
2232
2294
|
if (token) {
|
|
@@ -2251,7 +2313,7 @@ class Parser {
|
|
|
2251
2313
|
}
|
|
2252
2314
|
break;
|
|
2253
2315
|
}
|
|
2254
|
-
const namePart = parseNodes_1.NameNode.create(identifier);
|
|
2316
|
+
const namePart = parseNodes_1.NameNode.create(this._getOwnerKey(), identifier);
|
|
2255
2317
|
moduleNameNode.d.nameParts.push(namePart);
|
|
2256
2318
|
namePart.parent = moduleNameNode;
|
|
2257
2319
|
(0, parseNodes_1.extendRange)(moduleNameNode, namePart);
|
|
@@ -2266,7 +2328,7 @@ class Parser {
|
|
|
2266
2328
|
}
|
|
2267
2329
|
_parseGlobalStatement() {
|
|
2268
2330
|
const globalToken = this._getKeywordToken(19 /* KeywordType.Global */);
|
|
2269
|
-
const globalNode = parseNodes_1.GlobalNode.create(globalToken);
|
|
2331
|
+
const globalNode = parseNodes_1.GlobalNode.create(this._getOwnerKey(), globalToken);
|
|
2270
2332
|
globalNode.d.targets = this._parseNameList();
|
|
2271
2333
|
if (globalNode.d.targets.length > 0) {
|
|
2272
2334
|
globalNode.d.targets.forEach((name) => {
|
|
@@ -2278,7 +2340,7 @@ class Parser {
|
|
|
2278
2340
|
}
|
|
2279
2341
|
_parseNonlocalStatement() {
|
|
2280
2342
|
const nonlocalToken = this._getKeywordToken(28 /* KeywordType.Nonlocal */);
|
|
2281
|
-
const nonlocalNode = parseNodes_1.NonlocalNode.create(nonlocalToken);
|
|
2343
|
+
const nonlocalNode = parseNodes_1.NonlocalNode.create(this._getOwnerKey(), nonlocalToken);
|
|
2282
2344
|
nonlocalNode.d.targets = this._parseNameList();
|
|
2283
2345
|
if (nonlocalNode.d.targets.length > 0) {
|
|
2284
2346
|
nonlocalNode.d.targets.forEach((name) => {
|
|
@@ -2296,7 +2358,7 @@ class Parser {
|
|
|
2296
2358
|
this._addSyntaxError(localize_1.LocMessage.expectedIdentifier(), this._peekToken());
|
|
2297
2359
|
break;
|
|
2298
2360
|
}
|
|
2299
|
-
nameList.push(parseNodes_1.NameNode.create(name));
|
|
2361
|
+
nameList.push(parseNodes_1.NameNode.create(this._getOwnerKey(), name));
|
|
2300
2362
|
if (!this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
|
2301
2363
|
break;
|
|
2302
2364
|
}
|
|
@@ -2307,7 +2369,7 @@ class Parser {
|
|
|
2307
2369
|
// (old) raise_stmt: 'raise' [test [',' test [',' test]]]
|
|
2308
2370
|
_parseRaiseStatement() {
|
|
2309
2371
|
const raiseToken = this._getKeywordToken(32 /* KeywordType.Raise */);
|
|
2310
|
-
const raiseNode = parseNodes_1.RaiseNode.create(raiseToken);
|
|
2372
|
+
const raiseNode = parseNodes_1.RaiseNode.create(this._getOwnerKey(), raiseToken);
|
|
2311
2373
|
if (!this._isNextTokenNeverExpression()) {
|
|
2312
2374
|
raiseNode.d.expr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
2313
2375
|
raiseNode.d.expr.parent = raiseNode;
|
|
@@ -2324,7 +2386,7 @@ class Parser {
|
|
|
2324
2386
|
_parseAssertStatement() {
|
|
2325
2387
|
const assertToken = this._getKeywordToken(2 /* KeywordType.Assert */);
|
|
2326
2388
|
const expr = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
2327
|
-
const assertNode = parseNodes_1.AssertNode.create(assertToken, expr);
|
|
2389
|
+
const assertNode = parseNodes_1.AssertNode.create(this._getOwnerKey(), assertToken, expr);
|
|
2328
2390
|
if (this._consumeTokenIfType(12 /* TokenType.Comma */)) {
|
|
2329
2391
|
const exceptionExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
2330
2392
|
assertNode.d.exceptionExpr = exceptionExpr;
|
|
@@ -2340,7 +2402,7 @@ class Parser {
|
|
|
2340
2402
|
if (!exprListResult.parseError && exprListResult.list.length === 0) {
|
|
2341
2403
|
this._addSyntaxError(localize_1.LocMessage.expectedDelExpr(), this._peekToken());
|
|
2342
2404
|
}
|
|
2343
|
-
const delNode = parseNodes_1.DelNode.create(delToken);
|
|
2405
|
+
const delNode = parseNodes_1.DelNode.create(this._getOwnerKey(), delToken);
|
|
2344
2406
|
delNode.d.targets = exprListResult.list;
|
|
2345
2407
|
if (delNode.d.targets.length > 0) {
|
|
2346
2408
|
delNode.d.targets.forEach((expr) => {
|
|
@@ -2359,7 +2421,7 @@ class Parser {
|
|
|
2359
2421
|
if (pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_3)) {
|
|
2360
2422
|
this._addSyntaxError(localize_1.LocMessage.yieldFromIllegal(), nextToken);
|
|
2361
2423
|
}
|
|
2362
|
-
return parseNodes_1.YieldFromNode.create(yieldToken, this._parseTestExpression(/* allowAssignmentExpression */ false));
|
|
2424
|
+
return parseNodes_1.YieldFromNode.create(this._getOwnerKey(), yieldToken, this._parseTestExpression(/* allowAssignmentExpression */ false));
|
|
2363
2425
|
}
|
|
2364
2426
|
let exprList;
|
|
2365
2427
|
if (!this._isNextTokenNeverExpression()) {
|
|
@@ -2368,7 +2430,7 @@ class Parser {
|
|
|
2368
2430
|
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedYieldExpr());
|
|
2369
2431
|
this._reportConditionalErrorForStarTupleElement(exprList);
|
|
2370
2432
|
}
|
|
2371
|
-
return parseNodes_1.YieldNode.create(yieldToken, exprList);
|
|
2433
|
+
return parseNodes_1.YieldNode.create(this._getOwnerKey(), yieldToken, exprList);
|
|
2372
2434
|
}
|
|
2373
2435
|
_tryParseYieldExpression() {
|
|
2374
2436
|
if (this._peekKeywordType() !== 39 /* KeywordType.Yield */) {
|
|
@@ -2378,7 +2440,7 @@ class Parser {
|
|
|
2378
2440
|
}
|
|
2379
2441
|
// simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
|
|
2380
2442
|
_parseSimpleStatement() {
|
|
2381
|
-
const statement = parseNodes_1.StatementListNode.create(this._peekToken());
|
|
2443
|
+
const statement = parseNodes_1.StatementListNode.create(this._getOwnerKey(), this._peekToken());
|
|
2382
2444
|
while (true) {
|
|
2383
2445
|
// Swallow invalid tokens to make sure we make forward progress.
|
|
2384
2446
|
if (this._peekTokenType() === 0 /* TokenType.Invalid */) {
|
|
@@ -2501,7 +2563,7 @@ class Parser {
|
|
|
2501
2563
|
// To accommodate empty tuples ("()"), we will reach back to get
|
|
2502
2564
|
// the opening parenthesis as the opening token.
|
|
2503
2565
|
const tupleStartRange = exprListResult.list.length > 0 ? exprListResult.list[0] : this._peekToken(-1);
|
|
2504
|
-
const tupleNode = parseNodes_1.TupleNode.create(tupleStartRange, enclosedInParens);
|
|
2566
|
+
const tupleNode = parseNodes_1.TupleNode.create(this._getOwnerKey(), tupleStartRange, enclosedInParens);
|
|
2505
2567
|
tupleNode.d.items = exprListResult.list;
|
|
2506
2568
|
if (exprListResult.list.length > 0) {
|
|
2507
2569
|
exprListResult.list.forEach((expr) => {
|
|
@@ -2514,7 +2576,7 @@ class Parser {
|
|
|
2514
2576
|
_parseExpressionListAsPossibleTuple(errorCategory, getErrorString, errorToken) {
|
|
2515
2577
|
if (this._isNextTokenNeverExpression()) {
|
|
2516
2578
|
this._addSyntaxError(getErrorString(), errorToken);
|
|
2517
|
-
return parseNodes_1.ErrorNode.create(errorToken, errorCategory);
|
|
2579
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), errorToken, errorCategory);
|
|
2518
2580
|
}
|
|
2519
2581
|
const exprListResult = this._parseExpressionList(/* allowStar */ true);
|
|
2520
2582
|
if (exprListResult.parseError) {
|
|
@@ -2571,7 +2633,7 @@ class Parser {
|
|
|
2571
2633
|
_parseExpression(allowUnpack) {
|
|
2572
2634
|
const startToken = this._peekToken();
|
|
2573
2635
|
if (allowUnpack && this._consumeTokenIfOperator(26 /* OperatorType.Multiply */)) {
|
|
2574
|
-
return parseNodes_1.UnpackNode.create(startToken, this._parseExpression(/* allowUnpack */ false));
|
|
2636
|
+
return parseNodes_1.UnpackNode.create(this._getOwnerKey(), startToken, this._parseExpression(/* allowUnpack */ false));
|
|
2575
2637
|
}
|
|
2576
2638
|
return this._parseBitwiseOrExpression();
|
|
2577
2639
|
}
|
|
@@ -2599,10 +2661,10 @@ class Parser {
|
|
|
2599
2661
|
return testExpr;
|
|
2600
2662
|
}
|
|
2601
2663
|
if (!this._consumeTokenIfKeyword(13 /* KeywordType.Else */)) {
|
|
2602
|
-
return parseNodes_1.TernaryNode.create(ifExpr, testExpr, this._handleExpressionParseError(1 /* ErrorExpressionCategory.MissingElse */, localize_1.LocMessage.expectedElse()));
|
|
2664
|
+
return parseNodes_1.TernaryNode.create(this._getOwnerKey(), ifExpr, testExpr, this._handleExpressionParseError(1 /* ErrorExpressionCategory.MissingElse */, localize_1.LocMessage.expectedElse()));
|
|
2603
2665
|
}
|
|
2604
2666
|
const elseExpr = this._parseTestExpression(/* allowAssignmentExpression */ true);
|
|
2605
|
-
return parseNodes_1.TernaryNode.create(ifExpr, testExpr, elseExpr);
|
|
2667
|
+
return parseNodes_1.TernaryNode.create(this._getOwnerKey(), ifExpr, testExpr, elseExpr);
|
|
2606
2668
|
}
|
|
2607
2669
|
// assign_expr: NAME := test
|
|
2608
2670
|
_parseAssignmentExpression(disallowAssignmentExpression = false) {
|
|
@@ -2624,7 +2686,7 @@ class Parser {
|
|
|
2624
2686
|
this._addSyntaxError(localize_1.LocMessage.walrusIllegal(), walrusToken);
|
|
2625
2687
|
}
|
|
2626
2688
|
const rightExpr = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
2627
|
-
return parseNodes_1.AssignmentExpressionNode.create(leftExpr, walrusToken, rightExpr);
|
|
2689
|
+
return parseNodes_1.AssignmentExpressionNode.create(this._getOwnerKey(), leftExpr, walrusToken, rightExpr);
|
|
2628
2690
|
}
|
|
2629
2691
|
// or_test: and_test ('or' and_test)*
|
|
2630
2692
|
_parseOrTest() {
|
|
@@ -2885,7 +2947,7 @@ class Parser {
|
|
|
2885
2947
|
const wasParsingTypeAnnotation = this._isParsingTypeAnnotation;
|
|
2886
2948
|
this._isParsingTypeAnnotation = false;
|
|
2887
2949
|
const argListResult = this._parseArgList();
|
|
2888
|
-
const callNode = parseNodes_1.CallNode.create(atomExpression, argListResult.args, argListResult.trailingComma);
|
|
2950
|
+
const callNode = parseNodes_1.CallNode.create(this._getOwnerKey(), atomExpression, argListResult.args, argListResult.trailingComma);
|
|
2889
2951
|
if (argListResult.args.length > 1 || argListResult.trailingComma) {
|
|
2890
2952
|
argListResult.args.forEach((arg) => {
|
|
2891
2953
|
if (arg.d.valueExpr.nodeType === 11 /* ParseNodeType.Comprehension */) {
|
|
@@ -2913,7 +2975,7 @@ class Parser {
|
|
|
2913
2975
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
|
2914
2976
|
const maxDepth = this._maxChildDepthMap.get(atomExpression.id) ?? 0;
|
|
2915
2977
|
if (maxDepth >= maxChildNodeDepth) {
|
|
2916
|
-
atomExpression = parseNodes_1.ErrorNode.create(callNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
2978
|
+
atomExpression = parseNodes_1.ErrorNode.create(this._getOwnerKey(), callNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
2917
2979
|
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
|
2918
2980
|
}
|
|
2919
2981
|
else {
|
|
@@ -2941,7 +3003,7 @@ class Parser {
|
|
|
2941
3003
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
|
2942
3004
|
this._isParsingIndexTrailer = wasParsingIndexTrailer;
|
|
2943
3005
|
const closingToken = this._peekToken();
|
|
2944
|
-
const indexNode = parseNodes_1.IndexNode.create(atomExpression, subscriptList.list, subscriptList.trailingComma, closingToken);
|
|
3006
|
+
const indexNode = parseNodes_1.IndexNode.create(this._getOwnerKey(), atomExpression, subscriptList.list, subscriptList.trailingComma, closingToken);
|
|
2945
3007
|
(0, parseNodes_1.extendRange)(indexNode, indexNode);
|
|
2946
3008
|
if (!this._consumeTokenIfType(16 /* TokenType.CloseBracket */)) {
|
|
2947
3009
|
// Handle the error case, but don't use the error node in this
|
|
@@ -2950,7 +3012,7 @@ class Parser {
|
|
|
2950
3012
|
}
|
|
2951
3013
|
const maxDepth = this._maxChildDepthMap.get(atomExpression.id) ?? 0;
|
|
2952
3014
|
if (maxDepth >= maxChildNodeDepth) {
|
|
2953
|
-
atomExpression = parseNodes_1.ErrorNode.create(indexNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
3015
|
+
atomExpression = parseNodes_1.ErrorNode.create(this._getOwnerKey(), indexNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
2954
3016
|
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
|
2955
3017
|
}
|
|
2956
3018
|
else {
|
|
@@ -2964,10 +3026,10 @@ class Parser {
|
|
|
2964
3026
|
if (!memberName) {
|
|
2965
3027
|
return this._handleExpressionParseError(7 /* ErrorExpressionCategory.MissingMemberAccessName */, localize_1.LocMessage.expectedMemberName(), startOfTrailerToken, atomExpression, [8 /* TokenType.Keyword */]);
|
|
2966
3028
|
}
|
|
2967
|
-
const memberAccessNode = parseNodes_1.MemberAccessNode.create(atomExpression, parseNodes_1.NameNode.create(memberName));
|
|
3029
|
+
const memberAccessNode = parseNodes_1.MemberAccessNode.create(this._getOwnerKey(), atomExpression, parseNodes_1.NameNode.create(this._getOwnerKey(), memberName));
|
|
2968
3030
|
const maxDepth = this._maxChildDepthMap.get(atomExpression.id) ?? 0;
|
|
2969
3031
|
if (maxDepth >= maxChildNodeDepth) {
|
|
2970
|
-
atomExpression = parseNodes_1.ErrorNode.create(memberAccessNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
3032
|
+
atomExpression = parseNodes_1.ErrorNode.create(this._getOwnerKey(), memberAccessNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
2971
3033
|
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), atomExpression);
|
|
2972
3034
|
}
|
|
2973
3035
|
else {
|
|
@@ -2980,7 +3042,7 @@ class Parser {
|
|
|
2980
3042
|
}
|
|
2981
3043
|
}
|
|
2982
3044
|
if (awaitToken) {
|
|
2983
|
-
return parseNodes_1.AwaitNode.create(awaitToken, atomExpression);
|
|
3045
|
+
return parseNodes_1.AwaitNode.create(this._getOwnerKey(), awaitToken, atomExpression);
|
|
2984
3046
|
}
|
|
2985
3047
|
return atomExpression;
|
|
2986
3048
|
}
|
|
@@ -3027,9 +3089,9 @@ class Parser {
|
|
|
3027
3089
|
}
|
|
3028
3090
|
}
|
|
3029
3091
|
}
|
|
3030
|
-
const argNode = parseNodes_1.ArgumentNode.create(firstToken, valueExpr, argType);
|
|
3092
|
+
const argNode = parseNodes_1.ArgumentNode.create(this._getOwnerKey(), firstToken, valueExpr, argType);
|
|
3031
3093
|
if (nameIdentifier) {
|
|
3032
|
-
argNode.d.name = parseNodes_1.NameNode.create(nameIdentifier);
|
|
3094
|
+
argNode.d.name = parseNodes_1.NameNode.create(this._getOwnerKey(), nameIdentifier);
|
|
3033
3095
|
argNode.d.name.parent = argNode;
|
|
3034
3096
|
}
|
|
3035
3097
|
if (argNode.d.name) {
|
|
@@ -3064,7 +3126,7 @@ class Parser {
|
|
|
3064
3126
|
const errorNode = this._handleExpressionParseError(3 /* ErrorExpressionCategory.MissingIndexOrSlice */, localize_1.LocMessage.expectedSliceIndex(),
|
|
3065
3127
|
/* targetToken */ undefined,
|
|
3066
3128
|
/* childNode */ undefined, [16 /* TokenType.CloseBracket */]);
|
|
3067
|
-
argList.push(parseNodes_1.ArgumentNode.create(this._peekToken(), errorNode, 0 /* ArgCategory.Simple */));
|
|
3129
|
+
argList.push(parseNodes_1.ArgumentNode.create(this._getOwnerKey(), this._peekToken(), errorNode, 0 /* ArgCategory.Simple */));
|
|
3068
3130
|
}
|
|
3069
3131
|
return {
|
|
3070
3132
|
list: argList,
|
|
@@ -3100,9 +3162,9 @@ class Parser {
|
|
|
3100
3162
|
if (sliceExpressions[0]) {
|
|
3101
3163
|
return sliceExpressions[0];
|
|
3102
3164
|
}
|
|
3103
|
-
return parseNodes_1.ErrorNode.create(this._peekToken(), 3 /* ErrorExpressionCategory.MissingIndexOrSlice */);
|
|
3165
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 3 /* ErrorExpressionCategory.MissingIndexOrSlice */);
|
|
3104
3166
|
}
|
|
3105
|
-
const sliceNode = parseNodes_1.SliceNode.create(firstToken);
|
|
3167
|
+
const sliceNode = parseNodes_1.SliceNode.create(this._getOwnerKey(), firstToken);
|
|
3106
3168
|
sliceNode.d.startValue = sliceExpressions[0];
|
|
3107
3169
|
if (sliceNode.d.startValue) {
|
|
3108
3170
|
sliceNode.d.startValue.parent = sliceNode;
|
|
@@ -3191,9 +3253,9 @@ class Parser {
|
|
|
3191
3253
|
}
|
|
3192
3254
|
}
|
|
3193
3255
|
}
|
|
3194
|
-
const argNode = parseNodes_1.ArgumentNode.create(firstToken, valueExpr, argType);
|
|
3256
|
+
const argNode = parseNodes_1.ArgumentNode.create(this._getOwnerKey(), firstToken, valueExpr, argType);
|
|
3195
3257
|
if (nameIdentifier) {
|
|
3196
|
-
argNode.d.name = parseNodes_1.NameNode.create(nameIdentifier);
|
|
3258
|
+
argNode.d.name = parseNodes_1.NameNode.create(this._getOwnerKey(), nameIdentifier);
|
|
3197
3259
|
argNode.d.name.parent = argNode;
|
|
3198
3260
|
}
|
|
3199
3261
|
return argNode;
|
|
@@ -3205,13 +3267,13 @@ class Parser {
|
|
|
3205
3267
|
_parseAtom() {
|
|
3206
3268
|
const nextToken = this._peekToken();
|
|
3207
3269
|
if (nextToken.type === 19 /* TokenType.Ellipsis */) {
|
|
3208
|
-
return parseNodes_1.EllipsisNode.create(this._getNextToken());
|
|
3270
|
+
return parseNodes_1.EllipsisNode.create(this._getOwnerKey(), this._getNextToken());
|
|
3209
3271
|
}
|
|
3210
3272
|
if (nextToken.type === 6 /* TokenType.Number */) {
|
|
3211
|
-
return parseNodes_1.NumberNode.create(this._getNextToken());
|
|
3273
|
+
return parseNodes_1.NumberNode.create(this._getOwnerKey(), this._getNextToken());
|
|
3212
3274
|
}
|
|
3213
3275
|
if (nextToken.type === 7 /* TokenType.Identifier */) {
|
|
3214
|
-
return parseNodes_1.NameNode.create(this._getNextToken());
|
|
3276
|
+
return parseNodes_1.NameNode.create(this._getOwnerKey(), this._getNextToken());
|
|
3215
3277
|
}
|
|
3216
3278
|
if (nextToken.type === 5 /* TokenType.String */ || nextToken.type === 24 /* TokenType.FStringStart */) {
|
|
3217
3279
|
return this._parseStringList();
|
|
@@ -3256,12 +3318,12 @@ class Parser {
|
|
|
3256
3318
|
keywordToken.keywordType === 34 /* KeywordType.True */ ||
|
|
3257
3319
|
keywordToken.keywordType === 9 /* KeywordType.Debug */ ||
|
|
3258
3320
|
keywordToken.keywordType === 27 /* KeywordType.None */) {
|
|
3259
|
-
return parseNodes_1.ConstantNode.create(this._getNextToken());
|
|
3321
|
+
return parseNodes_1.ConstantNode.create(this._getOwnerKey(), this._getNextToken());
|
|
3260
3322
|
}
|
|
3261
3323
|
// Make an identifier out of the keyword.
|
|
3262
3324
|
const keywordAsIdentifier = this._getTokenIfIdentifier();
|
|
3263
3325
|
if (keywordAsIdentifier) {
|
|
3264
|
-
return parseNodes_1.NameNode.create(keywordAsIdentifier);
|
|
3326
|
+
return parseNodes_1.NameNode.create(this._getOwnerKey(), keywordAsIdentifier);
|
|
3265
3327
|
}
|
|
3266
3328
|
}
|
|
3267
3329
|
return this._handleExpressionParseError(2 /* ErrorExpressionCategory.MissingExpression */, localize_1.LocMessage.expectedExpr());
|
|
@@ -3282,7 +3344,7 @@ class Parser {
|
|
|
3282
3344
|
const initialRange = stopTokens.some((k) => nextToken.type === k)
|
|
3283
3345
|
? targetToken ?? childNode ?? textRange_1.TextRange.create(nextToken.start, /* length */ 0)
|
|
3284
3346
|
: nextToken;
|
|
3285
|
-
const expr = parseNodes_1.ErrorNode.create(initialRange, category, childNode);
|
|
3347
|
+
const expr = parseNodes_1.ErrorNode.create(this._getOwnerKey(), initialRange, category, childNode);
|
|
3286
3348
|
this._consumeTokensUntilType(stopTokens);
|
|
3287
3349
|
return expr;
|
|
3288
3350
|
}
|
|
@@ -3300,7 +3362,7 @@ class Parser {
|
|
|
3300
3362
|
else {
|
|
3301
3363
|
testExpr = this._tryParseLambdaExpression(/* allowConditional */ false) || this._parseOrTest();
|
|
3302
3364
|
}
|
|
3303
|
-
const lambdaNode = parseNodes_1.LambdaNode.create(lambdaToken, testExpr);
|
|
3365
|
+
const lambdaNode = parseNodes_1.LambdaNode.create(this._getOwnerKey(), lambdaToken, testExpr);
|
|
3304
3366
|
lambdaNode.d.params = argList;
|
|
3305
3367
|
argList.forEach((arg) => {
|
|
3306
3368
|
arg.parent = lambdaNode;
|
|
@@ -3344,6 +3406,7 @@ class Parser {
|
|
|
3344
3406
|
_parseListAtom() {
|
|
3345
3407
|
const startBracket = this._getNextToken();
|
|
3346
3408
|
(0, debug_1.assert)(startBracket.type === 15 /* TokenType.OpenBracket */);
|
|
3409
|
+
const ownerKey = this._getOwnerKey();
|
|
3347
3410
|
const exprListResult = this._parseTestListWithComprehension(/* isGenerator */ false);
|
|
3348
3411
|
const closeBracket = this._peekToken();
|
|
3349
3412
|
if (!this._consumeTokenIfType(16 /* TokenType.CloseBracket */)) {
|
|
@@ -3351,7 +3414,7 @@ class Parser {
|
|
|
3351
3414
|
}
|
|
3352
3415
|
return _createList();
|
|
3353
3416
|
function _createList() {
|
|
3354
|
-
const listAtom = parseNodes_1.ListNode.create(startBracket);
|
|
3417
|
+
const listAtom = parseNodes_1.ListNode.create(ownerKey, startBracket);
|
|
3355
3418
|
if (closeBracket) {
|
|
3356
3419
|
(0, parseNodes_1.extendRange)(listAtom, closeBracket);
|
|
3357
3420
|
}
|
|
@@ -3438,7 +3501,7 @@ class Parser {
|
|
|
3438
3501
|
this._addSyntaxError(localize_1.LocMessage.keyValueInSet(), valueExpression);
|
|
3439
3502
|
}
|
|
3440
3503
|
else {
|
|
3441
|
-
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(keyExpression, valueExpression);
|
|
3504
|
+
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(this._getOwnerKey(), keyExpression, valueExpression);
|
|
3442
3505
|
let dictEntry = keyEntryNode;
|
|
3443
3506
|
const comprehension = this._tryParseComprehension(keyEntryNode, /* isGenerator */ false);
|
|
3444
3507
|
if (comprehension) {
|
|
@@ -3457,7 +3520,7 @@ class Parser {
|
|
|
3457
3520
|
this._addSyntaxError(localize_1.LocMessage.unpackInSet(), doubleStarExpression);
|
|
3458
3521
|
}
|
|
3459
3522
|
else {
|
|
3460
|
-
const listEntryNode = parseNodes_1.DictionaryExpandEntryNode.create(doubleStarExpression);
|
|
3523
|
+
const listEntryNode = parseNodes_1.DictionaryExpandEntryNode.create(this._getOwnerKey(), doubleStarExpression);
|
|
3461
3524
|
(0, parseNodes_1.extendRange)(listEntryNode, doubleStar);
|
|
3462
3525
|
let expandEntryNode = listEntryNode;
|
|
3463
3526
|
const comprehension = this._tryParseComprehension(listEntryNode, /* isGenerator */ false);
|
|
@@ -3476,8 +3539,8 @@ class Parser {
|
|
|
3476
3539
|
(0, debug_1.assert)(keyExpression !== undefined);
|
|
3477
3540
|
if (keyExpression) {
|
|
3478
3541
|
if (isDictionary) {
|
|
3479
|
-
const missingValueErrorNode = parseNodes_1.ErrorNode.create(this._peekToken(), 13 /* ErrorExpressionCategory.MissingDictValue */);
|
|
3480
|
-
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(keyExpression, missingValueErrorNode);
|
|
3542
|
+
const missingValueErrorNode = parseNodes_1.ErrorNode.create(this._getOwnerKey(), this._peekToken(), 13 /* ErrorExpressionCategory.MissingDictValue */);
|
|
3543
|
+
const keyEntryNode = parseNodes_1.DictionaryKeyEntryNode.create(this._getOwnerKey(), keyExpression, missingValueErrorNode);
|
|
3481
3544
|
dictionaryEntries.push(keyEntryNode);
|
|
3482
3545
|
this._addSyntaxError(localize_1.LocMessage.dictKeyValuePairs(), keyExpression);
|
|
3483
3546
|
}
|
|
@@ -3511,7 +3574,7 @@ class Parser {
|
|
|
3511
3574
|
closeCurlyBrace = undefined;
|
|
3512
3575
|
}
|
|
3513
3576
|
if (isSet) {
|
|
3514
|
-
const setAtom = parseNodes_1.SetNode.create(startBrace);
|
|
3577
|
+
const setAtom = parseNodes_1.SetNode.create(this._getOwnerKey(), startBrace);
|
|
3515
3578
|
if (closeCurlyBrace) {
|
|
3516
3579
|
(0, parseNodes_1.extendRange)(setAtom, closeCurlyBrace);
|
|
3517
3580
|
}
|
|
@@ -3524,7 +3587,7 @@ class Parser {
|
|
|
3524
3587
|
setAtom.d.items = setEntries;
|
|
3525
3588
|
return setAtom;
|
|
3526
3589
|
}
|
|
3527
|
-
const dictionaryAtom = parseNodes_1.DictionaryNode.create(startBrace);
|
|
3590
|
+
const dictionaryAtom = parseNodes_1.DictionaryNode.create(this._getOwnerKey(), startBrace);
|
|
3528
3591
|
if (trailingCommaToken) {
|
|
3529
3592
|
dictionaryAtom.d.trailingCommaToken = trailingCommaToken;
|
|
3530
3593
|
(0, parseNodes_1.extendRange)(dictionaryAtom, trailingCommaToken);
|
|
@@ -3584,7 +3647,7 @@ class Parser {
|
|
|
3584
3647
|
// Is this a type annotation assignment?
|
|
3585
3648
|
if (this._consumeTokenIfType(10 /* TokenType.Colon */)) {
|
|
3586
3649
|
annotationExpr = this._parseTypeAnnotation();
|
|
3587
|
-
leftExpr = parseNodes_1.TypeAnnotationNode.create(leftExpr, annotationExpr);
|
|
3650
|
+
leftExpr = parseNodes_1.TypeAnnotationNode.create(this._getOwnerKey(), leftExpr, annotationExpr);
|
|
3588
3651
|
if (!this._parseOptions.isStubFile &&
|
|
3589
3652
|
pythonVersion_1.PythonVersion.isLessThan(this._getLanguageVersion(), pythonVersion_1.pythonVersion3_6)) {
|
|
3590
3653
|
this._addSyntaxError(localize_1.LocMessage.varAnnotationIllegal(), annotationExpr);
|
|
@@ -3606,7 +3669,7 @@ class Parser {
|
|
|
3606
3669
|
/* allowAssignmentExpression */ false,
|
|
3607
3670
|
/* allowMultipleUnpack */ true, 2 /* ErrorExpressionCategory.MissingExpression */, () => localize_1.LocMessage.expectedAssignRightHandExpr());
|
|
3608
3671
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
|
3609
|
-
return parseNodes_1.AssignmentNode.create(leftExpr, rightExpr);
|
|
3672
|
+
return parseNodes_1.AssignmentNode.create(this._getOwnerKey(), leftExpr, rightExpr);
|
|
3610
3673
|
}
|
|
3611
3674
|
// Is this a simple assignment?
|
|
3612
3675
|
if (this._consumeTokenIfOperator(2 /* OperatorType.Assign */)) {
|
|
@@ -3622,7 +3685,7 @@ class Parser {
|
|
|
3622
3685
|
// Make a shallow copy of the dest expression but give it a new ID.
|
|
3623
3686
|
const destExpr = Object.assign({}, leftExpr);
|
|
3624
3687
|
destExpr.id = (0, parseNodes_1.getNextNodeId)();
|
|
3625
|
-
return parseNodes_1.AugmentedAssignmentNode.create(leftExpr, rightExpr, operatorToken.operatorType, destExpr);
|
|
3688
|
+
return parseNodes_1.AugmentedAssignmentNode.create(this._getOwnerKey(), leftExpr, rightExpr, operatorToken.operatorType, destExpr);
|
|
3626
3689
|
}
|
|
3627
3690
|
return leftExpr;
|
|
3628
3691
|
}
|
|
@@ -3647,7 +3710,7 @@ class Parser {
|
|
|
3647
3710
|
}
|
|
3648
3711
|
// Create a tree of assignment expressions starting with the first one.
|
|
3649
3712
|
// The final RHS value is assigned to the targets left to right in Python.
|
|
3650
|
-
let assignmentNode = parseNodes_1.AssignmentNode.create(assignmentTargets[0], rightExpr);
|
|
3713
|
+
let assignmentNode = parseNodes_1.AssignmentNode.create(this._getOwnerKey(), assignmentTargets[0], rightExpr);
|
|
3651
3714
|
// Look for a type annotation comment at the end of the line.
|
|
3652
3715
|
const typeAnnotationComment = this._parseVariableTypeAnnotationComment();
|
|
3653
3716
|
if (typeAnnotationComment) {
|
|
@@ -3666,7 +3729,7 @@ class Parser {
|
|
|
3666
3729
|
}
|
|
3667
3730
|
assignmentTargets.forEach((target, index) => {
|
|
3668
3731
|
if (index > 0) {
|
|
3669
|
-
assignmentNode = parseNodes_1.AssignmentNode.create(target, assignmentNode);
|
|
3732
|
+
assignmentNode = parseNodes_1.AssignmentNode.create(this._getOwnerKey(), target, assignmentNode);
|
|
3670
3733
|
}
|
|
3671
3734
|
});
|
|
3672
3735
|
return assignmentNode;
|
|
@@ -3709,7 +3772,7 @@ class Parser {
|
|
|
3709
3772
|
paramAnnotations = [];
|
|
3710
3773
|
isParamListEllipsis = true;
|
|
3711
3774
|
}
|
|
3712
|
-
return parseNodes_1.FunctionAnnotationNode.create(openParenToken, isParamListEllipsis, paramAnnotations, returnType);
|
|
3775
|
+
return parseNodes_1.FunctionAnnotationNode.create(this._getOwnerKey(), openParenToken, isParamListEllipsis, paramAnnotations, returnType);
|
|
3713
3776
|
}
|
|
3714
3777
|
_parseTypeAnnotation(allowUnpack = false) {
|
|
3715
3778
|
// Temporary set a flag that indicates we're parsing a type annotation.
|
|
@@ -3727,7 +3790,7 @@ class Parser {
|
|
|
3727
3790
|
}
|
|
3728
3791
|
let result = this._parseTestExpression(/* allowAssignmentExpression */ false);
|
|
3729
3792
|
if (isUnpack) {
|
|
3730
|
-
result = parseNodes_1.UnpackNode.create(startToken, result);
|
|
3793
|
+
result = parseNodes_1.UnpackNode.create(this._getOwnerKey(), startToken, result);
|
|
3731
3794
|
}
|
|
3732
3795
|
this._isParsingTypeAnnotation = wasParsingTypeAnnotation;
|
|
3733
3796
|
this._hasTypeAnnotations = true;
|
|
@@ -3769,7 +3832,7 @@ class Parser {
|
|
|
3769
3832
|
_makeStringNode(stringToken) {
|
|
3770
3833
|
const unescapedResult = StringTokenUtils.getUnescapedString(stringToken);
|
|
3771
3834
|
this._reportStringTokenErrors(stringToken, unescapedResult);
|
|
3772
|
-
return parseNodes_1.StringNode.create(stringToken, unescapedResult.value);
|
|
3835
|
+
return parseNodes_1.StringNode.create(this._getOwnerKey(), stringToken, unescapedResult.value);
|
|
3773
3836
|
}
|
|
3774
3837
|
_getTypeAnnotationCommentText() {
|
|
3775
3838
|
if (this._tokenIndex === 0) {
|
|
@@ -3804,30 +3867,32 @@ class Parser {
|
|
|
3804
3867
|
return undefined;
|
|
3805
3868
|
}
|
|
3806
3869
|
const stringNode = this._makeStringNode(stringToken);
|
|
3807
|
-
const stringListNode = parseNodes_1.StringListNode.create([stringNode]);
|
|
3870
|
+
const stringListNode = parseNodes_1.StringListNode.create(this._getOwnerKey(), [stringNode]);
|
|
3808
3871
|
const parser = new Parser();
|
|
3809
3872
|
const parseResults = parser.parseTextExpression(this._fileContents, stringToken.start, stringToken.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */,
|
|
3810
|
-
/* initialParenDepth */ undefined, this._typingSymbolAliases);
|
|
3873
|
+
/* initialParenDepth */ undefined, this._typingSymbolAliases, this._getOwnerKey());
|
|
3811
3874
|
parseResults.diagnostics.forEach((diag) => {
|
|
3812
3875
|
this._addSyntaxError(diag.message, stringListNode);
|
|
3813
3876
|
});
|
|
3814
3877
|
if (!parseResults.parseTree) {
|
|
3815
3878
|
return undefined;
|
|
3816
3879
|
}
|
|
3880
|
+
this._stringAnnotations.writer.addAll(parseResults.stringAnnotations);
|
|
3817
3881
|
return parseResults.parseTree;
|
|
3818
3882
|
}
|
|
3819
3883
|
_parseFunctionTypeAnnotationComment(stringToken, functionNode) {
|
|
3820
3884
|
const stringNode = this._makeStringNode(stringToken);
|
|
3821
|
-
const stringListNode = parseNodes_1.StringListNode.create([stringNode]);
|
|
3885
|
+
const stringListNode = parseNodes_1.StringListNode.create(this._getOwnerKey(), [stringNode]);
|
|
3822
3886
|
const parser = new Parser();
|
|
3823
3887
|
const parseResults = parser.parseTextExpression(this._fileContents, stringToken.start, stringToken.length, this._parseOptions, 2 /* ParseTextMode.FunctionAnnotation */,
|
|
3824
|
-
/* initialParenDepth */ undefined, this._typingSymbolAliases);
|
|
3888
|
+
/* initialParenDepth */ undefined, this._typingSymbolAliases, this._getOwnerKey());
|
|
3825
3889
|
parseResults.diagnostics.forEach((diag) => {
|
|
3826
3890
|
this._addSyntaxError(diag.message, stringListNode);
|
|
3827
3891
|
});
|
|
3828
3892
|
if (!parseResults.parseTree) {
|
|
3829
3893
|
return;
|
|
3830
3894
|
}
|
|
3895
|
+
this._stringAnnotations.writer.addAll(parseResults.stringAnnotations);
|
|
3831
3896
|
const functionAnnotation = parseResults.parseTree;
|
|
3832
3897
|
functionNode.d.funcAnnotationComment = functionAnnotation;
|
|
3833
3898
|
functionAnnotation.parent = functionNode;
|
|
@@ -3952,10 +4017,10 @@ class Parser {
|
|
|
3952
4017
|
break;
|
|
3953
4018
|
}
|
|
3954
4019
|
this._reportStringTokenErrors(startToken);
|
|
3955
|
-
return parseNodes_1.FormatStringNode.create(startToken, endToken, middleTokens, fieldExpressions, formatExpressions);
|
|
4020
|
+
return parseNodes_1.FormatStringNode.create(this._getOwnerKey(), startToken, endToken, middleTokens, fieldExpressions, formatExpressions);
|
|
3956
4021
|
}
|
|
3957
4022
|
_createBinaryOperationNode(leftExpression, rightExpression, operatorToken, operator) {
|
|
3958
|
-
const binaryNode = parseNodes_1.BinaryOperationNode.create(leftExpression, rightExpression, operatorToken, operator);
|
|
4023
|
+
const binaryNode = parseNodes_1.BinaryOperationNode.create(this._getOwnerKey(), leftExpression, rightExpression, operatorToken, operator);
|
|
3959
4024
|
// Determine if we're exceeding the max parse depth. If so, replace
|
|
3960
4025
|
// the subnode with an error node. Otherwise we risk crashing in the binder
|
|
3961
4026
|
// or type evaluator.
|
|
@@ -3963,20 +4028,20 @@ class Parser {
|
|
|
3963
4028
|
const rightMaxDepth = this._maxChildDepthMap.get(rightExpression.id) ?? 0;
|
|
3964
4029
|
if (leftMaxDepth >= maxChildNodeDepth || rightMaxDepth >= maxChildNodeDepth) {
|
|
3965
4030
|
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), binaryNode);
|
|
3966
|
-
return parseNodes_1.ErrorNode.create(binaryNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
4031
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), binaryNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
3967
4032
|
}
|
|
3968
4033
|
this._maxChildDepthMap.set(binaryNode.id, Math.max(leftMaxDepth, rightMaxDepth) + 1);
|
|
3969
4034
|
return binaryNode;
|
|
3970
4035
|
}
|
|
3971
4036
|
_createUnaryOperationNode(operatorToken, expression, operator) {
|
|
3972
|
-
const unaryNode = parseNodes_1.UnaryOperationNode.create(operatorToken, expression, operator);
|
|
4037
|
+
const unaryNode = parseNodes_1.UnaryOperationNode.create(this._getOwnerKey(), operatorToken, expression, operator);
|
|
3973
4038
|
// Determine if we're exceeding the max parse depth. If so, replace
|
|
3974
4039
|
// the subnode with an error node. Otherwise we risk crashing in the binder
|
|
3975
4040
|
// or type evaluator.
|
|
3976
4041
|
const maxDepth = this._maxChildDepthMap.get(expression.id) ?? 0;
|
|
3977
4042
|
if (maxDepth >= maxChildNodeDepth) {
|
|
3978
4043
|
this._addSyntaxError(localize_1.LocMessage.maxParseDepthExceeded(), unaryNode);
|
|
3979
|
-
return parseNodes_1.ErrorNode.create(unaryNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
4044
|
+
return parseNodes_1.ErrorNode.create(this._getOwnerKey(), unaryNode, 15 /* ErrorExpressionCategory.MaxDepthExceeded */);
|
|
3980
4045
|
}
|
|
3981
4046
|
this._maxChildDepthMap.set(unaryNode.id, maxDepth + 1);
|
|
3982
4047
|
return unaryNode;
|
|
@@ -3995,7 +4060,7 @@ class Parser {
|
|
|
3995
4060
|
break;
|
|
3996
4061
|
}
|
|
3997
4062
|
}
|
|
3998
|
-
const stringNode = parseNodes_1.StringListNode.create(stringList);
|
|
4063
|
+
const stringNode = parseNodes_1.StringListNode.create(this._getOwnerKey(), stringList);
|
|
3999
4064
|
// If we're parsing a type annotation, parse the contents of the string.
|
|
4000
4065
|
if (this._isParsingTypeAnnotation) {
|
|
4001
4066
|
// Don't allow multiple strings because we have no way of reporting
|
|
@@ -4031,15 +4096,16 @@ class Parser {
|
|
|
4031
4096
|
128 /* StringTokenFlags.Template */)) ===
|
|
4032
4097
|
0) {
|
|
4033
4098
|
const parser = new Parser();
|
|
4034
|
-
const parseResults = parser.parseTextExpression(this._fileContents, tokenOffset + prefixLength, unescapedString.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */, (stringNode.d.strings[0].d.token.flags & 4 /* StringTokenFlags.Triplicate */) !== 0 ? 1 : 0, this._typingSymbolAliases);
|
|
4099
|
+
const parseResults = parser.parseTextExpression(this._fileContents, tokenOffset + prefixLength, unescapedString.length, this._parseOptions, 1 /* ParseTextMode.VariableAnnotation */, (stringNode.d.strings[0].d.token.flags & 4 /* StringTokenFlags.Triplicate */) !== 0 ? 1 : 0, this._typingSymbolAliases, this._getOwnerKey());
|
|
4035
4100
|
if (parseResults.diagnostics.length === 0 ||
|
|
4036
4101
|
this._parseOptions.reportErrorsForParsedStringContents) {
|
|
4037
4102
|
parseResults.diagnostics.forEach((diag) => {
|
|
4038
4103
|
this._addSyntaxError(diag.message, stringNode);
|
|
4039
4104
|
});
|
|
4040
4105
|
if (parseResults.parseTree) {
|
|
4041
|
-
|
|
4042
|
-
|
|
4106
|
+
this._stringAnnotations.writer.set(stringNode, parseResults.parseTree);
|
|
4107
|
+
this._stringAnnotations.writer.addAll(parseResults.stringAnnotations);
|
|
4108
|
+
parseResults.parseTree.parent = stringNode;
|
|
4043
4109
|
}
|
|
4044
4110
|
}
|
|
4045
4111
|
}
|