@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.
Files changed (365) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +119 -24
  2. package/dist/analyzer/analyzerNodeInfo.js +408 -89
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/binder.d.ts +6 -3
  5. package/dist/analyzer/binder.js +157 -70
  6. package/dist/analyzer/binder.js.map +1 -1
  7. package/dist/analyzer/checker.d.ts +5 -2
  8. package/dist/analyzer/checker.js +92 -34
  9. package/dist/analyzer/checker.js.map +1 -1
  10. package/dist/analyzer/codeFlowEngine.d.ts +2 -1
  11. package/dist/analyzer/codeFlowEngine.js +12 -10
  12. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  13. package/dist/analyzer/codeFlowUtils.d.ts +2 -1
  14. package/dist/analyzer/codeFlowUtils.js +2 -3
  15. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  16. package/dist/analyzer/constraintSolver.js +47 -7
  17. package/dist/analyzer/constraintSolver.js.map +1 -1
  18. package/dist/analyzer/constructors.js +18 -8
  19. package/dist/analyzer/constructors.js.map +1 -1
  20. package/dist/analyzer/dataClasses.d.ts +6 -4
  21. package/dist/analyzer/dataClasses.js +119 -75
  22. package/dist/analyzer/dataClasses.js.map +1 -1
  23. package/dist/analyzer/declarationUtils.d.ts +2 -1
  24. package/dist/analyzer/declarationUtils.js +2 -2
  25. package/dist/analyzer/declarationUtils.js.map +1 -1
  26. package/dist/analyzer/decorators.d.ts +5 -4
  27. package/dist/analyzer/decorators.js +38 -21
  28. package/dist/analyzer/decorators.js.map +1 -1
  29. package/dist/analyzer/enums.d.ts +5 -4
  30. package/dist/analyzer/enums.js +11 -10
  31. package/dist/analyzer/enums.js.map +1 -1
  32. package/dist/analyzer/importResolver.d.ts +1 -1
  33. package/dist/analyzer/importResolver.js +5 -3
  34. package/dist/analyzer/importResolver.js.map +1 -1
  35. package/dist/analyzer/importStatementUtils.d.ts +3 -1
  36. package/dist/analyzer/importStatementUtils.js +14 -7
  37. package/dist/analyzer/importStatementUtils.js.map +1 -1
  38. package/dist/analyzer/namedTuples.d.ts +2 -1
  39. package/dist/analyzer/namedTuples.js +3 -4
  40. package/dist/analyzer/namedTuples.js.map +1 -1
  41. package/dist/analyzer/operations.d.ts +3 -2
  42. package/dist/analyzer/operations.js +8 -8
  43. package/dist/analyzer/operations.js.map +1 -1
  44. package/dist/analyzer/packageTypeVerifier.js +2 -2
  45. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  46. package/dist/analyzer/parseTreeUtils.d.ts +13 -11
  47. package/dist/analyzer/parseTreeUtils.js +62 -36
  48. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  49. package/dist/analyzer/parseTreeWalker.d.ts +7 -2
  50. package/dist/analyzer/parseTreeWalker.js +29 -175
  51. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  52. package/dist/analyzer/patternMatching.d.ts +4 -3
  53. package/dist/analyzer/patternMatching.js +47 -43
  54. package/dist/analyzer/patternMatching.js.map +1 -1
  55. package/dist/analyzer/program.d.ts +12 -0
  56. package/dist/analyzer/program.js +235 -29
  57. package/dist/analyzer/program.js.map +1 -1
  58. package/dist/analyzer/properties.d.ts +4 -3
  59. package/dist/analyzer/properties.js +7 -8
  60. package/dist/analyzer/properties.js.map +1 -1
  61. package/dist/analyzer/protocols.js +14 -2
  62. package/dist/analyzer/protocols.js.map +1 -1
  63. package/dist/analyzer/scope.d.ts +3 -0
  64. package/dist/analyzer/scope.js +10 -0
  65. package/dist/analyzer/scope.js.map +1 -1
  66. package/dist/analyzer/scopeUtils.d.ts +4 -3
  67. package/dist/analyzer/scopeUtils.js +8 -8
  68. package/dist/analyzer/scopeUtils.js.map +1 -1
  69. package/dist/analyzer/sentinel.d.ts +2 -1
  70. package/dist/analyzer/sentinel.js +2 -3
  71. package/dist/analyzer/sentinel.js.map +1 -1
  72. package/dist/analyzer/service.js +28 -10
  73. package/dist/analyzer/service.js.map +1 -1
  74. package/dist/analyzer/sourceEnumerator.d.ts +5 -0
  75. package/dist/analyzer/sourceEnumerator.js +57 -3
  76. package/dist/analyzer/sourceEnumerator.js.map +1 -1
  77. package/dist/analyzer/sourceFile.d.ts +12 -6
  78. package/dist/analyzer/sourceFile.js +73 -50
  79. package/dist/analyzer/sourceFile.js.map +1 -1
  80. package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
  81. package/dist/analyzer/sourceFileInfoUtils.js +8 -0
  82. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  83. package/dist/analyzer/sourceMapper.d.ts +4 -1
  84. package/dist/analyzer/sourceMapper.js +14 -8
  85. package/dist/analyzer/sourceMapper.js.map +1 -1
  86. package/dist/analyzer/symbol.d.ts +4 -1
  87. package/dist/analyzer/symbol.js +8 -0
  88. package/dist/analyzer/symbol.js.map +1 -1
  89. package/dist/analyzer/testWalker.js +2 -1
  90. package/dist/analyzer/testWalker.js.map +1 -1
  91. package/dist/analyzer/tracePrinter.d.ts +2 -1
  92. package/dist/analyzer/tracePrinter.js +2 -2
  93. package/dist/analyzer/tracePrinter.js.map +1 -1
  94. package/dist/analyzer/tuples.d.ts +3 -2
  95. package/dist/analyzer/tuples.js +5 -5
  96. package/dist/analyzer/tuples.js.map +1 -1
  97. package/dist/analyzer/typeCacheUtils.d.ts +6 -2
  98. package/dist/analyzer/typeCacheUtils.js +16 -37
  99. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  100. package/dist/analyzer/typeDocStringUtils.d.ts +5 -7
  101. package/dist/analyzer/typeDocStringUtils.js +229 -132
  102. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  103. package/dist/analyzer/typeEvaluator.d.ts +2 -0
  104. package/dist/analyzer/typeEvaluator.js +1280 -302
  105. package/dist/analyzer/typeEvaluator.js.map +1 -1
  106. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
  107. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  108. package/dist/analyzer/typeGuards.d.ts +3 -2
  109. package/dist/analyzer/typeGuards.js +37 -33
  110. package/dist/analyzer/typeGuards.js.map +1 -1
  111. package/dist/analyzer/typeStubWriter.js +12 -9
  112. package/dist/analyzer/typeStubWriter.js.map +1 -1
  113. package/dist/analyzer/typeUtils.js +3 -1
  114. package/dist/analyzer/typeUtils.js.map +1 -1
  115. package/dist/analyzer/typedDicts.d.ts +4 -3
  116. package/dist/analyzer/typedDicts.js +15 -14
  117. package/dist/analyzer/typedDicts.js.map +1 -1
  118. package/dist/analyzer/types.d.ts +11 -1
  119. package/dist/analyzer/types.js +48 -0
  120. package/dist/analyzer/types.js.map +1 -1
  121. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  122. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  123. package/dist/common/collectionUtils.js +15 -6
  124. package/dist/common/collectionUtils.js.map +1 -1
  125. package/dist/common/commandLineOptions.d.ts +1 -0
  126. package/dist/common/commandLineOptions.js.map +1 -1
  127. package/dist/common/configOptions.d.ts +4 -1
  128. package/dist/common/configOptions.js +68 -12
  129. package/dist/common/configOptions.js.map +1 -1
  130. package/dist/common/envVarUtils.d.ts +1 -0
  131. package/dist/common/envVarUtils.js +41 -10
  132. package/dist/common/envVarUtils.js.map +1 -1
  133. package/dist/common/extensibility.d.ts +3 -1
  134. package/dist/common/extensibility.js.map +1 -1
  135. package/dist/common/extraPathGlob.d.ts +12 -0
  136. package/dist/common/extraPathGlob.js +315 -0
  137. package/dist/common/extraPathGlob.js.map +1 -0
  138. package/dist/common/host.d.ts +2 -0
  139. package/dist/common/host.js.map +1 -1
  140. package/dist/common/languageServerInterface.d.ts +2 -1
  141. package/dist/common/languageServerInterface.js.map +1 -1
  142. package/dist/common/pathConsts.d.ts +1 -0
  143. package/dist/common/pathConsts.js +11 -1
  144. package/dist/common/pathConsts.js.map +1 -1
  145. package/dist/common/processUtils.d.ts +4 -2
  146. package/dist/common/processUtils.js +3 -0
  147. package/dist/common/processUtils.js.map +1 -1
  148. package/dist/common/stringUtils.d.ts +6 -0
  149. package/dist/common/stringUtils.js +87 -5
  150. package/dist/common/stringUtils.js.map +1 -1
  151. package/dist/common/textEditTracker.d.ts +3 -1
  152. package/dist/common/textEditTracker.js +8 -6
  153. package/dist/common/textEditTracker.js.map +1 -1
  154. package/dist/common/textRangeCollection.d.ts +1 -0
  155. package/dist/common/textRangeCollection.js +32 -1
  156. package/dist/common/textRangeCollection.js.map +1 -1
  157. package/dist/common/uri/uriUtils.d.ts +3 -0
  158. package/dist/common/uri/uriUtils.js +65 -15
  159. package/dist/common/uri/uriUtils.js.map +1 -1
  160. package/dist/fileSystemMapping.d.ts +10 -0
  161. package/dist/fileSystemMapping.js +176 -0
  162. package/dist/fileSystemMapping.js.map +1 -0
  163. package/dist/languageService/analyzerServiceExecutor.js +2 -1
  164. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  165. package/dist/languageService/autoImporter.d.ts +1 -0
  166. package/dist/languageService/autoImporter.js +32 -5
  167. package/dist/languageService/autoImporter.js.map +1 -1
  168. package/dist/languageService/callHierarchyProvider.d.ts +7 -0
  169. package/dist/languageService/callHierarchyProvider.js +97 -11
  170. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  171. package/dist/languageService/completionProvider.d.ts +30 -8
  172. package/dist/languageService/completionProvider.js +298 -93
  173. package/dist/languageService/completionProvider.js.map +1 -1
  174. package/dist/languageService/definitionProvider.js +7 -6
  175. package/dist/languageService/definitionProvider.js.map +1 -1
  176. package/dist/languageService/documentHighlightProvider.js +2 -1
  177. package/dist/languageService/documentHighlightProvider.js.map +1 -1
  178. package/dist/languageService/documentSymbolCollector.d.ts +3 -1
  179. package/dist/languageService/documentSymbolCollector.js +78 -14
  180. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  181. package/dist/languageService/documentSymbolProvider.js +3 -2
  182. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  183. package/dist/languageService/fileWatcherDynamicFeature.js +28 -1
  184. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  185. package/dist/languageService/hoverProvider.d.ts +2 -1
  186. package/dist/languageService/hoverProvider.js +48 -16
  187. package/dist/languageService/hoverProvider.js.map +1 -1
  188. package/dist/languageService/importSorter.d.ts +3 -1
  189. package/dist/languageService/importSorter.js +4 -2
  190. package/dist/languageService/importSorter.js.map +1 -1
  191. package/dist/languageService/importStatementCandidates.js +4 -2
  192. package/dist/languageService/importStatementCandidates.js.map +1 -1
  193. package/dist/languageService/quickActions.js +2 -1
  194. package/dist/languageService/quickActions.js.map +1 -1
  195. package/dist/languageService/referencesProvider.js +12 -5
  196. package/dist/languageService/referencesProvider.js.map +1 -1
  197. package/dist/languageService/signatureHelpProvider.d.ts +3 -0
  198. package/dist/languageService/signatureHelpProvider.js +56 -18
  199. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  200. package/dist/languageService/symbolIndexer.d.ts +2 -1
  201. package/dist/languageService/symbolIndexer.js +7 -7
  202. package/dist/languageService/symbolIndexer.js.map +1 -1
  203. package/dist/languageService/tooltipUtils.d.ts +1 -1
  204. package/dist/languageService/tooltipUtils.js +103 -35
  205. package/dist/languageService/tooltipUtils.js.map +1 -1
  206. package/dist/languageService/workspaceSymbolProvider.js +3 -2
  207. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  208. package/dist/localization/localize.d.ts +12 -0
  209. package/dist/localization/localize.js +14 -0
  210. package/dist/localization/localize.js.map +1 -1
  211. package/dist/localization/package.nls.cs.json +11 -0
  212. package/dist/localization/package.nls.de.json +11 -0
  213. package/dist/localization/package.nls.en-us.json +18 -0
  214. package/dist/localization/package.nls.es.json +11 -0
  215. package/dist/localization/package.nls.fr.json +11 -0
  216. package/dist/localization/package.nls.it.json +11 -0
  217. package/dist/localization/package.nls.ja.json +11 -0
  218. package/dist/localization/package.nls.ko.json +11 -0
  219. package/dist/localization/package.nls.pl.json +11 -0
  220. package/dist/localization/package.nls.pt-br.json +11 -0
  221. package/dist/localization/package.nls.qps-ploc.json +11 -0
  222. package/dist/localization/package.nls.ru.json +11 -0
  223. package/dist/localization/package.nls.tr.json +11 -0
  224. package/dist/localization/package.nls.zh-cn.json +12 -1
  225. package/dist/localization/package.nls.zh-tw.json +13 -2
  226. package/dist/parser/parseNodes.d.ts +85 -80
  227. package/dist/parser/parseNodes.js +182 -159
  228. package/dist/parser/parseNodes.js.map +1 -1
  229. package/dist/parser/parseTreeUtils.d.ts +3 -0
  230. package/dist/parser/parseTreeUtils.js +209 -0
  231. package/dist/parser/parseTreeUtils.js.map +1 -0
  232. package/dist/parser/parser.d.ts +16 -6
  233. package/dist/parser/parser.js +210 -144
  234. package/dist/parser/parser.js.map +1 -1
  235. package/dist/parser/stringAnnotationInfo.d.ts +16 -0
  236. package/dist/parser/stringAnnotationInfo.js +26 -0
  237. package/dist/parser/stringAnnotationInfo.js.map +1 -0
  238. package/dist/readonlyAugmentedFileSystem.d.ts +2 -9
  239. package/dist/readonlyAugmentedFileSystem.js +17 -144
  240. package/dist/readonlyAugmentedFileSystem.js.map +1 -1
  241. package/dist/server.js +2 -2
  242. package/dist/server.js.map +1 -1
  243. package/dist/tests/analyzerNodeInfo.test.d.ts +1 -0
  244. package/dist/tests/analyzerNodeInfo.test.js +113 -0
  245. package/dist/tests/analyzerNodeInfo.test.js.map +1 -0
  246. package/dist/tests/collectionUtils.test.js +46 -0
  247. package/dist/tests/collectionUtils.test.js.map +1 -1
  248. package/dist/tests/completions.test.js +34 -0
  249. package/dist/tests/completions.test.js.map +1 -1
  250. package/dist/tests/config.test.js +131 -6
  251. package/dist/tests/config.test.js.map +1 -1
  252. package/dist/tests/extraPathGlob.test.d.ts +1 -0
  253. package/dist/tests/extraPathGlob.test.js +434 -0
  254. package/dist/tests/extraPathGlob.test.js.map +1 -0
  255. package/dist/tests/fileSystemMapping.test.d.ts +1 -0
  256. package/dist/tests/fileSystemMapping.test.js +458 -0
  257. package/dist/tests/fileSystemMapping.test.js.map +1 -0
  258. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js +23 -0
  259. package/dist/tests/fourslash/completions.call.typedDict.fourslash.js.map +1 -1
  260. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js +14 -0
  261. package/dist/tests/fourslash/completions.call.typedDict.list.fourslash.js.map +1 -1
  262. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js +7 -0
  263. package/dist/tests/fourslash/completions.call.typedDict.states.fourslash.js.map +1 -1
  264. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.d.ts +1 -0
  265. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js +41 -0
  266. package/dist/tests/fourslash/completions.callSite.isinstanceNarrowing.fourslash.js.map +1 -0
  267. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js +2 -0
  268. package/dist/tests/fourslash/completions.dictionary.keys.literalTypes.fourslash.js.map +1 -1
  269. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js +5 -0
  270. package/dist/tests/fourslash/completions.fstring.stringLiteral.fourslash.js.map +1 -1
  271. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js +4 -0
  272. package/dist/tests/fourslash/completions.stringLiteral.fourslash.js.map +1 -1
  273. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.d.ts +1 -0
  274. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js +48 -0
  275. package/dist/tests/fourslash/findallreferences.protocolMemberVariable.fourslash.js.map +1 -0
  276. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js +8 -2
  277. package/dist/tests/fourslash/hover.inherited.docFromSrc.fourslash.js.map +1 -1
  278. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js +5 -2
  279. package/dist/tests/fourslash/hover.inherited.docFromStub.fourslash.js.map +1 -1
  280. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js +2 -2
  281. package/dist/tests/fourslash/signature.docstrings.overloaded.fourslash.js.map +1 -1
  282. package/dist/tests/harness/fourslash/testState.js +1 -1
  283. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  284. package/dist/tests/hoverProvider.test.js +38 -0
  285. package/dist/tests/hoverProvider.test.js.map +1 -1
  286. package/dist/tests/importStatementUtils.test.js +6 -3
  287. package/dist/tests/importStatementUtils.test.js.map +1 -1
  288. package/dist/tests/ipythonMode.test.js +38 -0
  289. package/dist/tests/ipythonMode.test.js.map +1 -1
  290. package/dist/tests/parseTreeUtils.test.js +88 -0
  291. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  292. package/dist/tests/parser.test.js +60 -3
  293. package/dist/tests/parser.test.js.map +1 -1
  294. package/dist/tests/positionUtils.test.js +23 -0
  295. package/dist/tests/positionUtils.test.js.map +1 -1
  296. package/dist/tests/pyrightFileSystem.test.js +41 -0
  297. package/dist/tests/pyrightFileSystem.test.js.map +1 -1
  298. package/dist/tests/service.test.js +77 -0
  299. package/dist/tests/service.test.js.map +1 -1
  300. package/dist/tests/sourceEnumeratorSymlink.test.d.ts +1 -0
  301. package/dist/tests/sourceEnumeratorSymlink.test.js +203 -0
  302. package/dist/tests/sourceEnumeratorSymlink.test.js.map +1 -0
  303. package/dist/tests/stringUtils.test.js +84 -0
  304. package/dist/tests/stringUtils.test.js.map +1 -1
  305. package/dist/tests/symlinkAliasInvalidation.test.d.ts +1 -0
  306. package/dist/tests/symlinkAliasInvalidation.test.js +471 -0
  307. package/dist/tests/symlinkAliasInvalidation.test.js.map +1 -0
  308. package/dist/tests/testUtils.d.ts +2 -0
  309. package/dist/tests/testUtils.js +7 -1
  310. package/dist/tests/testUtils.js.map +1 -1
  311. package/dist/tests/textEditUtil.test.js +2 -2
  312. package/dist/tests/textEditUtil.test.js.map +1 -1
  313. package/dist/tests/textRangeCollection.test.d.ts +1 -0
  314. package/dist/tests/textRangeCollection.test.js +137 -0
  315. package/dist/tests/textRangeCollection.test.js.map +1 -0
  316. package/dist/tests/typeCacheUtils.test.d.ts +1 -0
  317. package/dist/tests/typeCacheUtils.test.js +69 -0
  318. package/dist/tests/typeCacheUtils.test.js.map +1 -0
  319. package/dist/tests/typeEvaluator1.test.js +24 -3
  320. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  321. package/dist/tests/typeEvaluator3.test.js +8 -0
  322. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  323. package/dist/tests/typeEvaluator4.test.js +4 -0
  324. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  325. package/dist/tests/typeEvaluator5.test.js +12 -0
  326. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  327. package/dist/tests/typeEvaluator6.test.js +33 -1
  328. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  329. package/dist/tests/typeEvaluator7.test.js +29 -0
  330. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  331. package/dist/tests/typeEvaluator8.test.js +318 -4
  332. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  333. package/dist/tests/typeServer/typeCache.test.d.ts +1 -0
  334. package/dist/tests/typeServer/typeCache.test.js +69 -0
  335. package/dist/tests/typeServer/typeCache.test.js.map +1 -0
  336. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +18 -0
  337. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
  338. package/dist/tests/types.test.d.ts +1 -0
  339. package/dist/{analyzer/parseTreeCleaner.js → tests/types.test.js} +23 -25
  340. package/dist/tests/types.test.js.map +1 -0
  341. package/dist/tests/uri.test.js +51 -0
  342. package/dist/tests/uri.test.js.map +1 -1
  343. package/dist/typeServer/notebookDocumentHandler.d.ts +9 -2
  344. package/dist/typeServer/notebookDocumentHandler.js +16 -6
  345. package/dist/typeServer/notebookDocumentHandler.js.map +1 -1
  346. package/dist/typeServer/programWrapper.d.ts +1 -0
  347. package/dist/typeServer/programWrapper.js +28 -15
  348. package/dist/typeServer/programWrapper.js.map +1 -1
  349. package/dist/typeServer/protocol/tspSupplemental.d.ts +1 -1
  350. package/dist/typeServer/protocol/tspSupplemental.js +2 -2
  351. package/dist/typeServer/server.d.ts +13 -2
  352. package/dist/typeServer/server.js +36 -23
  353. package/dist/typeServer/server.js.map +1 -1
  354. package/dist/typeServer/typeCache.d.ts +8 -4
  355. package/dist/typeServer/typeCache.js +33 -5
  356. package/dist/typeServer/typeCache.js.map +1 -1
  357. package/dist/typeServer/typeEvalUtils.d.ts +2 -1
  358. package/dist/typeServer/typeEvalUtils.js +7 -3
  359. package/dist/typeServer/typeEvalUtils.js.map +1 -1
  360. package/dist/typeServer/typeServerFileSystem.d.ts +10 -9
  361. package/dist/typeServer/typeServerFileSystem.js +16 -12
  362. package/dist/typeServer/typeServerFileSystem.js.map +1 -1
  363. package/package.json +7 -5
  364. package/dist/analyzer/parseTreeCleaner.d.ts +0 -8
  365. package/dist/analyzer/parseTreeCleaner.js.map +0 -1
@@ -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.hashString)(fileContents),
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 || parseNodes_1.ErrorNode.create(this._peekToken(), 11 /* ErrorExpressionCategory.MissingPattern */);
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 ? parseNodes_1.MemberAccessNode.create(nameOrMember, nameNode) : nameNode;
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
- if (!dedentToken.matchesIndent) {
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
- stringNode.d.annotation = parseResults.parseTree;
4042
- stringNode.d.annotation.parent = stringNode;
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
  }