@zzzen/pyright-internal 1.2.0-dev.20260222 → 1.2.0-dev.20260422

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 (219) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
  2. package/dist/analyzer/backgroundAnalysisProgram.js +9 -6
  3. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  4. package/dist/analyzer/binder.d.ts +10 -1
  5. package/dist/analyzer/binder.js +258 -41
  6. package/dist/analyzer/binder.js.map +1 -1
  7. package/dist/analyzer/cellChainIndex.d.ts +34 -0
  8. package/dist/analyzer/cellChainIndex.js +126 -0
  9. package/dist/analyzer/cellChainIndex.js.map +1 -0
  10. package/dist/analyzer/checker.js +0 -1
  11. package/dist/analyzer/checker.js.map +1 -1
  12. package/dist/analyzer/codeFlowEngine.js +16 -1
  13. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  14. package/dist/analyzer/constructors.js +9 -2
  15. package/dist/analyzer/constructors.js.map +1 -1
  16. package/dist/analyzer/importResolver.d.ts +3 -21
  17. package/dist/analyzer/importResolver.js +42 -316
  18. package/dist/analyzer/importResolver.js.map +1 -1
  19. package/dist/analyzer/importResolverFileSystem.d.ts +3 -0
  20. package/dist/analyzer/importResolverFileSystem.js +160 -0
  21. package/dist/analyzer/importResolverFileSystem.js.map +1 -0
  22. package/dist/analyzer/importResolverTypes.d.ts +24 -0
  23. package/dist/analyzer/importResolverTypes.js +8 -0
  24. package/dist/analyzer/importResolverTypes.js.map +1 -0
  25. package/dist/analyzer/importStatementUtils.js +9 -0
  26. package/dist/analyzer/importStatementUtils.js.map +1 -1
  27. package/dist/analyzer/parseTreeUtils.d.ts +1 -0
  28. package/dist/analyzer/parseTreeUtils.js +24 -7
  29. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  30. package/dist/analyzer/patternMatching.js +14 -2
  31. package/dist/analyzer/patternMatching.js.map +1 -1
  32. package/dist/analyzer/program.d.ts +5 -3
  33. package/dist/analyzer/program.js +40 -51
  34. package/dist/analyzer/program.js.map +1 -1
  35. package/dist/analyzer/pythonPathUtils.d.ts +1 -1
  36. package/dist/analyzer/pythonPathUtils.js +3 -1
  37. package/dist/analyzer/pythonPathUtils.js.map +1 -1
  38. package/dist/analyzer/scope.d.ts +10 -1
  39. package/dist/analyzer/scope.js +14 -1
  40. package/dist/analyzer/scope.js.map +1 -1
  41. package/dist/analyzer/service.d.ts +11 -6
  42. package/dist/analyzer/service.js +82 -83
  43. package/dist/analyzer/service.js.map +1 -1
  44. package/dist/analyzer/sourceEnumerator.d.ts +3 -0
  45. package/dist/analyzer/sourceEnumerator.js +27 -1
  46. package/dist/analyzer/sourceEnumerator.js.map +1 -1
  47. package/dist/analyzer/sourceFile.d.ts +2 -1
  48. package/dist/analyzer/sourceFile.js +2 -2
  49. package/dist/analyzer/sourceFile.js.map +1 -1
  50. package/dist/analyzer/sourceFileInfo.d.ts +4 -0
  51. package/dist/analyzer/sourceFileInfo.js +9 -0
  52. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  53. package/dist/analyzer/sourceMapper.d.ts +1 -0
  54. package/dist/analyzer/sourceMapper.js +44 -0
  55. package/dist/analyzer/sourceMapper.js.map +1 -1
  56. package/dist/analyzer/tuples.js +3 -1
  57. package/dist/analyzer/tuples.js.map +1 -1
  58. package/dist/analyzer/typeEvaluator.js +102 -51
  59. package/dist/analyzer/typeEvaluator.js.map +1 -1
  60. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -0
  61. package/dist/analyzer/typeEvaluatorTypes.js +4 -0
  62. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  63. package/dist/analyzer/typeGuards.js +28 -6
  64. package/dist/analyzer/typeGuards.js.map +1 -1
  65. package/dist/analyzer/typeStubWriter.d.ts +15 -50
  66. package/dist/analyzer/typeStubWriter.js +91 -9
  67. package/dist/analyzer/typeStubWriter.js.map +1 -1
  68. package/dist/analyzer/typeUtils.d.ts +1 -0
  69. package/dist/analyzer/typeUtils.js +27 -3
  70. package/dist/analyzer/typeUtils.js.map +1 -1
  71. package/dist/analyzer/typeshedInfoProvider.d.ts +2 -0
  72. package/dist/analyzer/typeshedInfoProvider.js +232 -0
  73. package/dist/analyzer/typeshedInfoProvider.js.map +1 -0
  74. package/dist/backgroundAnalysisBase.d.ts +3 -3
  75. package/dist/backgroundAnalysisBase.js +12 -9
  76. package/dist/backgroundAnalysisBase.js.map +1 -1
  77. package/dist/commands/createTypeStub.d.ts +16 -8
  78. package/dist/commands/createTypeStub.js +58 -36
  79. package/dist/commands/createTypeStub.js.map +1 -1
  80. package/dist/common/cancellationUtils.d.ts +7 -0
  81. package/dist/common/cancellationUtils.js +34 -0
  82. package/dist/common/cancellationUtils.js.map +1 -1
  83. package/dist/common/collectionUtils.d.ts +3 -3
  84. package/dist/common/collectionUtils.js.map +1 -1
  85. package/dist/common/core.d.ts +1 -1
  86. package/dist/common/core.js.map +1 -1
  87. package/dist/common/crypto.js +11 -0
  88. package/dist/common/crypto.js.map +1 -1
  89. package/dist/common/extensibility.d.ts +7 -0
  90. package/dist/common/extensibility.js.map +1 -1
  91. package/dist/common/fullAccessHost.js +4 -2
  92. package/dist/common/fullAccessHost.js.map +1 -1
  93. package/dist/common/pathUtils.d.ts +4 -1
  94. package/dist/common/pathUtils.js.map +1 -1
  95. package/dist/common/realFileSystem.js +42 -3
  96. package/dist/common/realFileSystem.js.map +1 -1
  97. package/dist/common/serviceKeys.d.ts +3 -0
  98. package/dist/common/serviceKeys.js +2 -0
  99. package/dist/common/serviceKeys.js.map +1 -1
  100. package/dist/common/serviceProviderExtensions.js.map +1 -1
  101. package/dist/common/uri/uriUtils.d.ts +4 -0
  102. package/dist/common/uri/uriUtils.js +19 -3
  103. package/dist/common/uri/uriUtils.js.map +1 -1
  104. package/dist/common/workspaceEditUtils.js +0 -2
  105. package/dist/common/workspaceEditUtils.js.map +1 -1
  106. package/dist/languageServerBase.d.ts +1 -0
  107. package/dist/languageServerBase.js +6 -0
  108. package/dist/languageServerBase.js.map +1 -1
  109. package/dist/languageService/completionProvider.d.ts +6 -0
  110. package/dist/languageService/completionProvider.js +252 -75
  111. package/dist/languageService/completionProvider.js.map +1 -1
  112. package/dist/languageService/definitionProvider.js +1 -1
  113. package/dist/languageService/definitionProvider.js.map +1 -1
  114. package/dist/languageService/documentSymbolCollector.js +34 -4
  115. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  116. package/dist/languageService/dynamicFeature.d.ts +3 -0
  117. package/dist/languageService/dynamicFeature.js +5 -0
  118. package/dist/languageService/dynamicFeature.js.map +1 -1
  119. package/dist/languageService/hoverProvider.d.ts +2 -1
  120. package/dist/languageService/hoverProvider.js +13 -5
  121. package/dist/languageService/hoverProvider.js.map +1 -1
  122. package/dist/languageService/pullDiagnosticsDynamicFeature.d.ts +1 -0
  123. package/dist/languageService/pullDiagnosticsDynamicFeature.js +4 -0
  124. package/dist/languageService/pullDiagnosticsDynamicFeature.js.map +1 -1
  125. package/dist/languageService/referencesProvider.js +5 -4
  126. package/dist/languageService/referencesProvider.js.map +1 -1
  127. package/dist/languageService/signatureHelpProvider.d.ts +1 -0
  128. package/dist/languageService/signatureHelpProvider.js +76 -2
  129. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  130. package/dist/languageService/symbolIndexer.d.ts +1 -0
  131. package/dist/languageService/symbolIndexer.js.map +1 -1
  132. package/dist/languageService/tooltipUtils.d.ts +11 -4
  133. package/dist/languageService/tooltipUtils.js +195 -7
  134. package/dist/languageService/tooltipUtils.js.map +1 -1
  135. package/dist/parser/tokenizer.js +6 -2
  136. package/dist/parser/tokenizer.js.map +1 -1
  137. package/dist/partialStubService.d.ts +11 -0
  138. package/dist/partialStubService.js +23 -1
  139. package/dist/partialStubService.js.map +1 -1
  140. package/dist/pyright.js +13 -2
  141. package/dist/pyright.js.map +1 -1
  142. package/dist/tests/chainedSourceFiles.test.js +138 -0
  143. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  144. package/dist/tests/checker.test.js +12 -0
  145. package/dist/tests/checker.test.js.map +1 -1
  146. package/dist/tests/completions.test.js +328 -0
  147. package/dist/tests/completions.test.js.map +1 -1
  148. package/dist/tests/config.test.js +54 -0
  149. package/dist/tests/config.test.js.map +1 -1
  150. package/dist/tests/filesystem.test.js +44 -0
  151. package/dist/tests/filesystem.test.js.map +1 -1
  152. package/dist/tests/fourSlashRunner.test.js +1 -1
  153. package/dist/tests/fourSlashRunner.test.js.map +1 -1
  154. package/dist/tests/fourslash/findDefinitions.definitionFilter.preferSource.fourslash.js +25 -1
  155. package/dist/tests/fourslash/findDefinitions.definitionFilter.preferSource.fourslash.js.map +1 -1
  156. package/dist/tests/fourslash/import.multipart3.fourslash.d.ts +1 -0
  157. package/dist/tests/fourslash/import.multipart3.fourslash.js +46 -0
  158. package/dist/tests/fourslash/import.multipart3.fourslash.js.map +1 -0
  159. package/dist/tests/fourslash/import.pytyped.unsupportedDunderAll.fourslash.d.ts +1 -0
  160. package/dist/tests/fourslash/import.pytyped.unsupportedDunderAll.fourslash.js +33 -0
  161. package/dist/tests/fourslash/import.pytyped.unsupportedDunderAll.fourslash.js.map +1 -0
  162. package/dist/tests/harness/fourslash/runner.d.ts +4 -4
  163. package/dist/tests/harness/fourslash/runner.js +5 -5
  164. package/dist/tests/harness/fourslash/runner.js.map +1 -1
  165. package/dist/tests/harness/fourslash/testState.d.ts +20 -5
  166. package/dist/tests/harness/fourslash/testState.js +11 -26
  167. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  168. package/dist/tests/harness/fourslash/testStateUtils.js +2 -0
  169. package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
  170. package/dist/tests/harness/testAccessHost.d.ts +3 -1
  171. package/dist/tests/harness/testAccessHost.js +6 -2
  172. package/dist/tests/harness/testAccessHost.js.map +1 -1
  173. package/dist/tests/harness/testHost.js +20 -18
  174. package/dist/tests/harness/testHost.js.map +1 -1
  175. package/dist/tests/harness/vfs/factory.js +4 -1
  176. package/dist/tests/harness/vfs/factory.js.map +1 -1
  177. package/dist/tests/harness/vfs/filesystem.d.ts +8 -1
  178. package/dist/tests/harness/vfs/filesystem.js +84 -30
  179. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  180. package/dist/tests/hoverProvider.test.js +290 -0
  181. package/dist/tests/hoverProvider.test.js.map +1 -1
  182. package/dist/tests/importResolverSupport.test.d.ts +1 -0
  183. package/dist/tests/importResolverSupport.test.js +319 -0
  184. package/dist/tests/importResolverSupport.test.js.map +1 -0
  185. package/dist/tests/importStatementUtils.test.js +66 -0
  186. package/dist/tests/importStatementUtils.test.js.map +1 -1
  187. package/dist/tests/lsp/{webpack.testserver.config.d.ts → rspack.testserver.config.d.ts} +1 -1
  188. package/dist/tests/lsp/{webpack.testserver.config.js → rspack.testserver.config.js} +4 -11
  189. package/dist/tests/lsp/rspack.testserver.config.js.map +1 -0
  190. package/dist/tests/realTempFile.test.d.ts +1 -0
  191. package/dist/tests/realTempFile.test.js +144 -0
  192. package/dist/tests/realTempFile.test.js.map +1 -0
  193. package/dist/tests/service.test.js +182 -3
  194. package/dist/tests/service.test.js.map +1 -1
  195. package/dist/tests/signatureHelp.test.js +391 -6
  196. package/dist/tests/signatureHelp.test.js.map +1 -1
  197. package/dist/tests/testState.test.js +19 -0
  198. package/dist/tests/testState.test.js.map +1 -1
  199. package/dist/tests/tokenizer.test.js +42 -0
  200. package/dist/tests/tokenizer.test.js.map +1 -1
  201. package/dist/tests/typeEvaluator1.test.js +4 -0
  202. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  203. package/dist/tests/typeEvaluator2.test.js +12 -0
  204. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  205. package/dist/tests/typeEvaluator3.test.js +8 -1
  206. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  207. package/dist/tests/typeEvaluator6.test.js +7 -0
  208. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  209. package/dist/tests/typeEvaluator8.test.js +13 -1
  210. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  211. package/dist/tests/uri.test.js +29 -0
  212. package/dist/tests/uri.test.js.map +1 -1
  213. package/dist/tests/wildcardImportPackageMerge.test.d.ts +1 -0
  214. package/dist/tests/wildcardImportPackageMerge.test.js +97 -0
  215. package/dist/tests/wildcardImportPackageMerge.test.js.map +1 -0
  216. package/dist/tests/workspaceEditUtils.test.js +0 -1
  217. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  218. package/package.json +12 -11
  219. package/dist/tests/lsp/webpack.testserver.config.js.map +0 -1
@@ -43,7 +43,7 @@ export declare class BackgroundAnalysisProgram {
43
43
  getChainedUri(fileUri: Uri): Uri | undefined;
44
44
  updateChainedUri(fileUri: Uri, chainedUri: Uri | undefined): void;
45
45
  updateOpenFileContents(uri: Uri, version: number | null, contents: string, options: OpenFileOptions): void;
46
- setFileClosed(fileUri: Uri, isTracked?: boolean): void;
46
+ setFileClosed(fileUri: Uri): void;
47
47
  addInterimFile(fileUri: Uri): void;
48
48
  markAllFilesDirty(evenIfContentsAreSame: boolean): void;
49
49
  markFilesDirty(fileUris: Uri[], evenIfContentsAreSame: boolean): void;
@@ -12,6 +12,7 @@ exports.BackgroundAnalysisProgram = exports.InvalidatedReason = void 0;
12
12
  require("../common/serviceProviderExtensions");
13
13
  const analysis_1 = require("./analysis");
14
14
  const program_1 = require("./program");
15
+ const typeStubWriter_1 = require("./typeStubWriter");
15
16
  var InvalidatedReason;
16
17
  (function (InvalidatedReason) {
17
18
  InvalidatedReason[InvalidatedReason["Reanalyzed"] = 0] = "Reanalyzed";
@@ -91,9 +92,9 @@ class BackgroundAnalysisProgram {
91
92
  this._program.setFileOpened(uri, version, contents, options);
92
93
  this.markFilesDirty([uri], /* evenIfContentsAreSame */ true);
93
94
  }
94
- setFileClosed(fileUri, isTracked) {
95
- this._backgroundAnalysis?.setFileClosed(fileUri, isTracked);
96
- const diagnostics = this._program.setFileClosed(fileUri, isTracked);
95
+ setFileClosed(fileUri) {
96
+ this._backgroundAnalysis?.setFileClosed(fileUri);
97
+ const diagnostics = this._program.setFileClosed(fileUri);
97
98
  this._reportDiagnosticsForRemovedFiles(diagnostics);
98
99
  }
99
100
  addInterimFile(fileUri) {
@@ -144,9 +145,11 @@ class BackgroundAnalysisProgram {
144
145
  if (this._backgroundAnalysis) {
145
146
  return this._backgroundAnalysis.writeTypeStub(targetImportUri, targetIsSingleFile, stubUri, token);
146
147
  }
147
- (0, analysis_1.analyzeProgram)(this._program,
148
- /* maxTime */ undefined, this._configOptions, this._onAnalysisCompletion, this._serviceProvider.console(), token);
149
- return this._program.writeTypeStub(targetImportUri, targetIsSingleFile, stubUri, token);
148
+ return new typeStubWriter_1.TypeStubWriter(this._program).writeTypeStub({
149
+ targetImportPath: targetImportUri,
150
+ targetIsSingleFile,
151
+ outputPath: stubUri,
152
+ }, token);
150
153
  }
151
154
  invalidateAndForceReanalysis(reason, refreshOptions) {
152
155
  this._backgroundAnalysis?.invalidateAndForceReanalysis(reason);
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { AssertNode, AssignmentExpressionNode, AssignmentNode, AugmentedAssignmentNode, AwaitNode, BinaryOperationNode, BreakNode, CallNode, ClassNode, ComprehensionNode, ContinueNode, DelNode, ExceptNode, ForNode, FunctionNode, GlobalNode, IfNode, ImportAsNode, ImportFromNode, IndexNode, LambdaNode, MatchNode, MemberAccessNode, ModuleNameNode, ModuleNode, NameNode, NonlocalNode, ParseNode, PatternAsNode, PatternCaptureNode, PatternMappingExpandEntryNode, RaiseNode, ReturnNode, SuiteNode, TernaryNode, TryNode, TypeAliasNode, TypeAnnotationNode, TypeParameterListNode, UnaryOperationNode, WhileNode, WithNode, YieldFromNode, YieldNode } from '../parser/parseNodes';
2
2
  import { AnalyzerFileInfo } from './analyzerFileInfo';
3
3
  import { ParseTreeWalker } from './parseTreeWalker';
4
+ import { CellChainIndexProvider } from './cellChainIndex';
4
5
  import { Scope } from './scope';
5
6
  export declare class Binder extends ParseTreeWalker {
6
7
  private _moduleSymbolOnly;
8
+ private readonly _cellChainIndex?;
7
9
  private readonly _fileInfo;
8
10
  private _deferredBindingTasks;
9
11
  private _currentScope;
@@ -35,7 +37,7 @@ export declare class Binder extends ParseTreeWalker {
35
37
  private _potentialWildcardReexportSymbols;
36
38
  private _potentialPrivateSymbols;
37
39
  private _codeFlowComplexity;
38
- constructor(fileInfo: AnalyzerFileInfo, _moduleSymbolOnly?: boolean);
40
+ constructor(fileInfo: AnalyzerFileInfo, _moduleSymbolOnly?: boolean, _cellChainIndex?: CellChainIndexProvider | undefined);
39
41
  bindModule(node: ModuleNode): void;
40
42
  visitModule(node: ModuleNode): boolean;
41
43
  visitSuite(node: SuiteNode): boolean;
@@ -80,6 +82,7 @@ export declare class Binder extends ParseTreeWalker {
80
82
  visitPatternAs(node: PatternAsNode): boolean;
81
83
  visitPatternCapture(node: PatternCaptureNode): boolean;
82
84
  visitPatternMappingExpandEntry(node: PatternMappingExpandEntryNode): boolean;
85
+ private _isNonEmptyListOrTupleLiteral;
83
86
  private _addTypingImportAliasesFromBuiltinsScope;
84
87
  private _formatModuleName;
85
88
  private _getNonClassParentScope;
@@ -121,6 +124,7 @@ export declare class Binder extends ParseTreeWalker {
121
124
  private _addImplicitSymbolToCurrentScope;
122
125
  private _addSymbolToCurrentScope;
123
126
  private _createNewScope;
127
+ private _createCellChainModuleLevelLookup;
124
128
  private _addInferredTypeAssignmentForVariable;
125
129
  private _isInferenceAllowedInPyTyped;
126
130
  private _addTypeDeclarationForVariable;
@@ -132,6 +136,11 @@ export declare class Binder extends ParseTreeWalker {
132
136
  private _isAnnotationClassVar;
133
137
  private _getMemberAccessInfo;
134
138
  private _addImplicitImportsToLoaderActions;
139
+ private _addWildcardImportedModuleAlias;
140
+ private _getMultipartModuleAliasDeclaration;
141
+ private _cloneMultipartModuleAliasDeclaration;
142
+ private _cloneModuleLoaderActions;
143
+ private _mergeModuleLoaderActions;
135
144
  private _handleTypingStubAssignmentOrAnnotation;
136
145
  private _deferBinding;
137
146
  private _bindDeferred;
@@ -64,9 +64,10 @@ const symbolNameUtils_1 = require("./symbolNameUtils");
64
64
  // flow nodes. This number is somewhat arbitrary and is tuned empirically.
65
65
  const flowNodeComplexityContribution = 0.025;
66
66
  class Binder extends parseTreeWalker_1.ParseTreeWalker {
67
- constructor(fileInfo, _moduleSymbolOnly = false) {
67
+ constructor(fileInfo, _moduleSymbolOnly = false, _cellChainIndex) {
68
68
  super();
69
69
  this._moduleSymbolOnly = _moduleSymbolOnly;
70
+ this._cellChainIndex = _cellChainIndex;
70
71
  // A queue of deferred analysis operations.
71
72
  this._deferredBindingTasks = [];
72
73
  // Flow nodes used within try blocks.
@@ -113,9 +114,10 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
113
114
  // We'll assume that if there is no builtins scope provided, we must be
114
115
  // binding the builtins module itself.
115
116
  const isBuiltInModule = this._fileInfo.builtinsScope === undefined;
117
+ const chainedModuleLevelScopeLookup = this._createCellChainModuleLevelLookup();
116
118
  this._addTypingImportAliasesFromBuiltinsScope();
117
119
  this._createNewScope(isBuiltInModule ? 5 /* ScopeType.Builtin */ : 4 /* ScopeType.Module */, this._fileInfo.builtinsScope,
118
- /* proxyScope */ undefined, () => {
120
+ /* proxyScope */ undefined, chainedModuleLevelScopeLookup, () => {
119
121
  AnalyzerNodeInfo.setScope(node, this._currentScope);
120
122
  AnalyzerNodeInfo.setFlowNode(node, this._currentFlowNode);
121
123
  // Bind implicit names.
@@ -141,10 +143,15 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
141
143
  });
142
144
  // Perform all analysis that was deferred during the first pass.
143
145
  this._bindDeferred();
144
- // Use the __all__ list to determine whether any potential private
145
- // symbols should be made externally hidden or private.
146
+ // Use the __all__ list to determine whether any potential private symbols should be
147
+ // made externally hidden or private. When __all__ uses an unsupported form (e.g.,
148
+ // dynamic construction like __all__ = _components + [...]), we can't determine
149
+ // membership statically; fall back to name-convention heuristics so that
150
+ // underscore-prefixed names are still treated as private while normally-named
151
+ // symbols avoid false positives.
152
+ const shouldProcess = (name) => !this._usesUnsupportedDunderAllForm || (0, symbolNameUtils_1.isPrivateOrProtectedName)(name);
146
153
  this._potentialHiddenSymbols.forEach((symbol, name) => {
147
- if (!this._dunderAllNames?.some((sym) => sym === name)) {
154
+ if (shouldProcess(name) && !this._dunderAllNames?.some((sym) => sym === name)) {
148
155
  if (this._fileInfo.isStubFile) {
149
156
  symbol.setIsExternallyHidden();
150
157
  }
@@ -156,13 +163,20 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
156
163
  // Wildcard imports are considered a re-export form, but if this module defines
157
164
  // __all__, that list determines the public interface and should restrict which
158
165
  // wildcard-imported symbols are exposed.
159
- this._potentialWildcardReexportSymbols.forEach((symbol, name) => {
160
- if (this._dunderAllNames && !this._dunderAllNames.some((sym) => sym === name)) {
161
- symbol.setPrivatePyTypedImport();
162
- }
163
- });
166
+ if (this._dunderAllNames) {
167
+ const dunderAllNames = this._dunderAllNames;
168
+ this._potentialWildcardReexportSymbols.forEach((symbol, name) => {
169
+ if (shouldProcess(name) && !dunderAllNames.some((sym) => sym === name)) {
170
+ symbol.setPrivatePyTypedImport();
171
+ }
172
+ });
173
+ }
174
+ // Single-underscore module-level names remain private even when __all__ uses an
175
+ // unsupported/computed form. Since every entry in _potentialPrivateSymbols already
176
+ // has an underscore prefix, shouldProcess always returns true here, preserving
177
+ // the behavior of upstream pyright test `Private3`.
164
178
  this._potentialPrivateSymbols.forEach((symbol, name) => {
165
- if (!this._dunderAllNames?.some((sym) => sym === name)) {
179
+ if (shouldProcess(name) && !this._dunderAllNames?.some((sym) => sym === name)) {
166
180
  symbol.setIsPrivateMember();
167
181
  }
168
182
  });
@@ -262,7 +276,8 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
262
276
  }
263
277
  this.walkMultiple(node.d.arguments);
264
278
  this._createNewScope(3 /* ScopeType.Class */, typeParamScope ?? this._getNonClassParentScope(),
265
- /* proxyScope */ undefined, () => {
279
+ /* proxyScope */ undefined,
280
+ /* chainedModuleLevelScopeLookup */ undefined, () => {
266
281
  AnalyzerNodeInfo.setScope(node, this._currentScope);
267
282
  this._addImplicitSymbolToCurrentScope('__doc__', node, 'str | None');
268
283
  this._addImplicitSymbolToCurrentScope('__module__', node, 'str');
@@ -329,7 +344,8 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
329
344
  // Don't walk the body of the function until we're done analyzing
330
345
  // the current scope.
331
346
  this._createNewScope(2 /* ScopeType.Function */, typeParamScope ?? this._getNonClassParentScope(),
332
- /* proxyScope */ undefined, () => {
347
+ /* proxyScope */ undefined,
348
+ /* chainedModuleLevelScopeLookup */ undefined, () => {
333
349
  AnalyzerNodeInfo.setScope(node, this._currentScope);
334
350
  const enclosingClass = ParseTreeUtils.getEnclosingClass(node);
335
351
  if (enclosingClass) {
@@ -390,7 +406,9 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
390
406
  this.walk(param.d.defaultValue);
391
407
  }
392
408
  });
393
- this._createNewScope(2 /* ScopeType.Function */, this._getNonClassParentScope(), /* proxyScope */ undefined, () => {
409
+ this._createNewScope(2 /* ScopeType.Function */, this._getNonClassParentScope(),
410
+ /* proxyScope */ undefined,
411
+ /* chainedModuleLevelScopeLookup */ undefined, () => {
394
412
  AnalyzerNodeInfo.setScope(node, this._currentScope);
395
413
  this._deferBinding(() => {
396
414
  // Create a start node for the lambda.
@@ -627,7 +645,11 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
627
645
  // If we didn't create assignment target flow nodes above, do so now.
628
646
  this._createAssignmentTargetFlowNodes(node.d.leftExpr, /* walkTargets */ true, /* unbound */ false);
629
647
  // Is this an assignment to dunder all?
630
- if (this._currentScope.type === 4 /* ScopeType.Module */) {
648
+ // Process __all__ for both Module and Builtin scope types. The Builtin scope type
649
+ // is used when binding without a builtins scope (e.g., in indexing scenarios where
650
+ // typeshed may not be available). We still want to extract __all__ information
651
+ // to properly filter wildcard imports.
652
+ if (this._currentScope.type === 4 /* ScopeType.Module */ || this._currentScope.type === 5 /* ScopeType.Builtin */) {
631
653
  if ((node.d.leftExpr.nodeType === 38 /* ParseNodeType.Name */ && node.d.leftExpr.d.value === '__all__') ||
632
654
  (node.d.leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */ &&
633
655
  node.d.leftExpr.d.valueExpr.nodeType === 38 /* ParseNodeType.Name */ &&
@@ -843,12 +865,19 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
843
865
  const preForLabel = this._createLoopLabel();
844
866
  const preElseLabel = this._createBranchLabel();
845
867
  const postForLabel = this._createBranchLabel();
868
+ // Determine if this loop is guaranteed to execute at least once
869
+ const isGuaranteedToExecute = this._isNonEmptyListOrTupleLiteral(node.d.iterableExpr);
846
870
  this._addAntecedent(preForLabel, this._currentFlowNode);
847
871
  this._currentFlowNode = preForLabel;
848
- this._addAntecedent(preElseLabel, this._currentFlowNode);
872
+ // Only add zero-iteration path for potentially-empty iterables
873
+ if (!isGuaranteedToExecute) {
874
+ this._addAntecedent(preElseLabel, this._currentFlowNode);
875
+ }
849
876
  const targetExpressions = this._trackCodeFlowExpressions(() => {
850
877
  this._createAssignmentTargetFlowNodes(node.d.targetExpr, /* walkTargets */ true, /* unbound */ false);
851
878
  });
879
+ // Record antecedent count before the loop body to detect continue back-edges.
880
+ const preBodyAntecedentCount = preForLabel.antecedents.length;
852
881
  this._bindLoopStatement(preForLabel, postForLabel, () => {
853
882
  this.walk(node.d.forSuite);
854
883
  this._addAntecedent(preForLabel, this._currentFlowNode);
@@ -857,6 +886,39 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
857
886
  this._currentScopeCodeFlowExpressions?.add(value);
858
887
  });
859
888
  });
889
+ // For guaranteed loops, add post-body exit path to preElseLabel.
890
+ // When _currentFlowNode is reachable (normal completion or conditional break),
891
+ // use it directly — it carries the post-body type state.
892
+ // When _currentFlowNode is unreachable (all paths end with break/continue/return/raise),
893
+ // we must distinguish the cause:
894
+ // - All break: preElseLabel gets nothing. Python's else doesn't run after break,
895
+ // and break already sent the assigned-state to postForLabel.
896
+ // - All continue: preForLabel accumulated continue back-edges. Use it as an
897
+ // approximation for the loop-completion state feeding into else.
898
+ // - All return/raise: preElseLabel gets nothing. Post-loop is unreachable.
899
+ // - Mix with continue: if any continues occurred, use preForLabel for else path.
900
+ if (isGuaranteedToExecute) {
901
+ if (this._currentFlowNode.flags &
902
+ (codeFlowTypes_1.FlowFlags.UnreachableStructural | codeFlowTypes_1.FlowFlags.UnreachableStaticCondition)) {
903
+ // Check if any continue statements added back-edges to preForLabel.
904
+ const hasContinueBackEdges = preForLabel.antecedents.length > preBodyAntecedentCount;
905
+ if (hasContinueBackEdges) {
906
+ // Some paths continued — use preForLabel (with accumulated continue state)
907
+ // as the else-clause antecedent.
908
+ const savedFlowNode = this._currentFlowNode;
909
+ this._currentFlowNode = preForLabel;
910
+ this._addAntecedent(preElseLabel, preForLabel);
911
+ this._currentFlowNode = savedFlowNode;
912
+ }
913
+ // Otherwise (all break / all return / all raise): preElseLabel gets no
914
+ // antecedent. For break, the flow already reached postForLabel directly.
915
+ // For return/raise, post-loop code is unreachable.
916
+ }
917
+ else {
918
+ // Normal completion or conditional break — use current flow node.
919
+ this._addAntecedent(preElseLabel, this._currentFlowNode);
920
+ }
921
+ }
860
922
  this._currentFlowNode = this._finishFlowLabel(preElseLabel);
861
923
  if (node.d.elseSuite) {
862
924
  this.walk(node.d.elseSuite);
@@ -1377,19 +1439,24 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
1377
1439
  // Is the symbol in the target module's symbol table? If so,
1378
1440
  // alias it.
1379
1441
  if (importedSymbol) {
1380
- const aliasDecl = {
1381
- type: 8 /* DeclarationType.Alias */,
1382
- node,
1383
- uri: resolvedPath,
1384
- loadSymbolsFromPath: true,
1385
- range: (0, textRange_1.getEmptyRange)(), // Range is unknown for wildcard name import.
1386
- usesLocalName: false,
1387
- symbolName: name,
1388
- moduleName: this._fileInfo.moduleName,
1389
- isInExceptSuite: this._isInExceptSuite,
1390
- };
1391
- localSymbol.addDeclaration(aliasDecl);
1392
- names.push(name);
1442
+ if (this._addWildcardImportedModuleAlias(node, localSymbol, importedSymbol)) {
1443
+ names.push(name);
1444
+ }
1445
+ else {
1446
+ const aliasDecl = {
1447
+ type: 8 /* DeclarationType.Alias */,
1448
+ node,
1449
+ uri: resolvedPath,
1450
+ loadSymbolsFromPath: true,
1451
+ range: (0, textRange_1.getEmptyRange)(), // Range is unknown for wildcard name import.
1452
+ usesLocalName: false,
1453
+ symbolName: name,
1454
+ moduleName: this._fileInfo.moduleName,
1455
+ isInExceptSuite: this._isInExceptSuite,
1456
+ };
1457
+ localSymbol.addDeclaration(aliasDecl);
1458
+ names.push(name);
1459
+ }
1393
1460
  }
1394
1461
  else {
1395
1462
  // The symbol wasn't in the target module's symbol table. It's probably
@@ -1675,7 +1742,8 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
1675
1742
  this.walk(node.d.forIfNodes[0].d.iterableExpr);
1676
1743
  }
1677
1744
  this._createNewScope(1 /* ScopeType.Comprehension */, this._getNonClassParentScope(),
1678
- /* proxyScope */ undefined, () => {
1745
+ /* proxyScope */ undefined,
1746
+ /* chainedModuleLevelScopeLookup */ undefined, () => {
1679
1747
  AnalyzerNodeInfo.setScope(node, this._currentScope);
1680
1748
  const falseLabel = this._createBranchLabel();
1681
1749
  // We'll walk the forIfNodes list twice. The first time we'll
@@ -1845,6 +1913,19 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
1845
1913
  }
1846
1914
  return true;
1847
1915
  }
1916
+ // Helper method to determine if an expression is a non-empty list or tuple literal.
1917
+ // This is a syntactic check, not a semantic one, so it's very fast.
1918
+ // Guards against starred expressions ([*empty_list]) and comprehensions ([v for v in []]).
1919
+ _isNonEmptyListOrTupleLiteral(expr) {
1920
+ if (expr.nodeType === 34 /* ParseNodeType.List */) {
1921
+ return (expr.d.items.length > 0 &&
1922
+ expr.d.items.every((item) => item.nodeType !== 56 /* ParseNodeType.Unpack */ && item.nodeType !== 11 /* ParseNodeType.Comprehension */));
1923
+ }
1924
+ if (expr.nodeType === 52 /* ParseNodeType.Tuple */) {
1925
+ return expr.d.items.length > 0 && expr.d.items.every((item) => item.nodeType !== 56 /* ParseNodeType.Unpack */);
1926
+ }
1927
+ return false;
1928
+ }
1848
1929
  _addTypingImportAliasesFromBuiltinsScope() {
1849
1930
  if (!this._fileInfo.builtinsScope) {
1850
1931
  return;
@@ -2740,17 +2821,14 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
2740
2821
  this._potentialPrivateSymbols.set(name, symbol);
2741
2822
  }
2742
2823
  }
2743
- else if (this._fileInfo.isStubFile || this._fileInfo.isInPyTypedPackage) {
2744
- if (this._currentScope.type === 5 /* ScopeType.Builtin */) {
2745
- // Don't include private-named symbols in the builtin scope.
2746
- symbol.setIsExternallyHidden();
2747
- }
2748
- else {
2749
- this._potentialPrivateSymbols.set(name, symbol);
2750
- }
2824
+ else if (this._currentScope.type === 5 /* ScopeType.Builtin */) {
2825
+ // Don't include private-named symbols in the builtin scope.
2826
+ symbol.setIsExternallyHidden();
2751
2827
  }
2752
2828
  else {
2753
- symbol.setIsPrivateMember();
2829
+ // Defer the private/protected decision until __all__ is processed
2830
+ // so an explicit __all__ entry can promote the symbol to public.
2831
+ this._potentialPrivateSymbols.set(name, symbol);
2754
2832
  }
2755
2833
  }
2756
2834
  }
@@ -2826,9 +2904,9 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
2826
2904
  }
2827
2905
  return symbol;
2828
2906
  }
2829
- _createNewScope(scopeType, parentScope, proxyScope, callback) {
2907
+ _createNewScope(scopeType, parentScope, proxyScope, chainedModuleLevelScopeLookup, callback) {
2830
2908
  const prevScope = this._currentScope;
2831
- const newScope = new scope_1.Scope(scopeType, parentScope, proxyScope);
2909
+ const newScope = new scope_1.Scope(scopeType, parentScope, proxyScope, chainedModuleLevelScopeLookup);
2832
2910
  this._currentScope = newScope;
2833
2911
  // If this scope is an execution scope, allocate a new reference map.
2834
2912
  const isExecutionScope = scopeType === 5 /* ScopeType.Builtin */ || scopeType === 4 /* ScopeType.Module */ || scopeType === 2 /* ScopeType.Function */;
@@ -2841,6 +2919,51 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
2841
2919
  this._currentScope = prevScope;
2842
2920
  return newScope;
2843
2921
  }
2922
+ // The chained module-level lookup is installed only on Module scope. This ensures it is
2923
+ // consulted exactly once during recursive lookup — after the module's own symbol table
2924
+ // but before ascending to builtins — when `useChainedModuleLevelScopes` is set by a nested
2925
+ // evaluation context (function body, lambda, class header, or comprehension inside a
2926
+ // function). Non-module scopes pass `undefined` so they never trigger a redundant search.
2927
+ _createCellChainModuleLevelLookup() {
2928
+ if (!this._cellChainIndex) {
2929
+ return undefined;
2930
+ }
2931
+ const cellChainIndex = this._cellChainIndex;
2932
+ const fileUri = this._fileInfo.fileUri;
2933
+ // The callback preserves the caller's beyond-execution-scope
2934
+ // state so that hits from later cells are correctly marked.
2935
+ return (name, context) => {
2936
+ for (const moduleNode of cellChainIndex.getLaterModuleNodes(fileUri) ?? []) {
2937
+ const moduleScope = AnalyzerNodeInfo.getScope(moduleNode);
2938
+ if (!moduleScope) {
2939
+ continue;
2940
+ }
2941
+ const symbol = moduleScope.lookUpSymbol(name);
2942
+ if (!symbol) {
2943
+ continue;
2944
+ }
2945
+ if (context?.isOutsideCallerModule && symbol.isExternallyHidden()) {
2946
+ continue;
2947
+ }
2948
+ // Skip symbols whose only declarations are attribute assignments
2949
+ // (e.g. `self.x = ...`); these are instance-level, not module globals.
2950
+ const decls = symbol.getDeclarations();
2951
+ if (decls.length > 0 &&
2952
+ !decls.some((decl) => decl.type !== 1 /* DeclarationType.Variable */ || !decl.isDefinedByMemberAccess)) {
2953
+ continue;
2954
+ }
2955
+ return {
2956
+ symbol,
2957
+ scope: moduleScope,
2958
+ isOutsideCallerModule: !!context?.isOutsideCallerModule,
2959
+ isBeyondExecutionScope: !!context?.isBeyondExecutionScope,
2960
+ usesNonlocalBinding: !!context?.usesNonlocalBinding,
2961
+ usesGlobalBinding: !!context?.usesGlobalBinding,
2962
+ };
2963
+ }
2964
+ return undefined;
2965
+ };
2966
+ }
2844
2967
  _addInferredTypeAssignmentForVariable(target, source, isPossibleTypeAlias = false) {
2845
2968
  switch (target.nodeType) {
2846
2969
  case 38 /* ParseNodeType.Name */: {
@@ -3277,6 +3400,100 @@ class Binder extends parseTreeWalker_1.ParseTreeWalker {
3277
3400
  }
3278
3401
  });
3279
3402
  }
3403
+ _addWildcardImportedModuleAlias(node, localSymbol, importedSymbol) {
3404
+ const importedModuleAliasDecl = this._getMultipartModuleAliasDeclaration(importedSymbol);
3405
+ if (!importedModuleAliasDecl) {
3406
+ return false;
3407
+ }
3408
+ const existingModuleAliasDecl = this._getMultipartModuleAliasDeclaration(localSymbol, importedModuleAliasDecl.moduleName, importedModuleAliasDecl.firstNamePart);
3409
+ if (existingModuleAliasDecl) {
3410
+ this._mergeModuleLoaderActions(existingModuleAliasDecl, importedModuleAliasDecl);
3411
+ }
3412
+ else {
3413
+ localSymbol.addDeclaration(this._cloneMultipartModuleAliasDeclaration(node, importedModuleAliasDecl));
3414
+ }
3415
+ return true;
3416
+ }
3417
+ // Finds the latest alias declaration that represents the root of a multipart import
3418
+ // chain, regardless of whether it originated from a direct import or wildcard merge.
3419
+ _getMultipartModuleAliasDeclaration(symbol, moduleName, firstNamePart) {
3420
+ const declarations = symbol.getDeclarations();
3421
+ for (let index = declarations.length - 1; index >= 0; index--) {
3422
+ const declaration = declarations[index];
3423
+ if (declaration.type !== 8 /* DeclarationType.Alias */ || declaration.symbolName || !declaration.firstNamePart) {
3424
+ continue;
3425
+ }
3426
+ if (moduleName !== undefined && declaration.moduleName !== moduleName) {
3427
+ continue;
3428
+ }
3429
+ if (firstNamePart !== undefined && declaration.firstNamePart !== firstNamePart) {
3430
+ continue;
3431
+ }
3432
+ return declaration;
3433
+ }
3434
+ return undefined;
3435
+ }
3436
+ _cloneMultipartModuleAliasDeclaration(node, declaration) {
3437
+ const clonedLoaderActions = this._cloneModuleLoaderActions(declaration);
3438
+ const clonedDeclaration = {
3439
+ type: 8 /* DeclarationType.Alias */,
3440
+ node,
3441
+ uri: clonedLoaderActions.uri,
3442
+ loadSymbolsFromPath: clonedLoaderActions.loadSymbolsFromPath,
3443
+ range: (0, textRange_1.getEmptyRange)(),
3444
+ usesLocalName: false,
3445
+ moduleName: declaration.moduleName,
3446
+ firstNamePart: declaration.firstNamePart,
3447
+ isInExceptSuite: this._isInExceptSuite,
3448
+ implicitImports: clonedLoaderActions.implicitImports,
3449
+ };
3450
+ if (clonedLoaderActions.isUnresolved) {
3451
+ clonedDeclaration.isUnresolved = true;
3452
+ }
3453
+ if (declaration.isNativeLib) {
3454
+ clonedDeclaration.isNativeLib = true;
3455
+ }
3456
+ return clonedDeclaration;
3457
+ }
3458
+ _cloneModuleLoaderActions(loaderActions) {
3459
+ const clonedLoaderActions = {
3460
+ uri: loaderActions.uri,
3461
+ loadSymbolsFromPath: loaderActions.loadSymbolsFromPath,
3462
+ };
3463
+ if (loaderActions.isUnresolved) {
3464
+ clonedLoaderActions.isUnresolved = true;
3465
+ }
3466
+ if (loaderActions.implicitImports) {
3467
+ clonedLoaderActions.implicitImports = new Map();
3468
+ loaderActions.implicitImports.forEach((implicitImport, name) => {
3469
+ clonedLoaderActions.implicitImports.set(name, this._cloneModuleLoaderActions(implicitImport));
3470
+ });
3471
+ }
3472
+ return clonedLoaderActions;
3473
+ }
3474
+ _mergeModuleLoaderActions(target, source) {
3475
+ if (!source.uri.isEmpty() && (target.uri.isEmpty() || !target.loadSymbolsFromPath)) {
3476
+ target.uri = source.uri;
3477
+ }
3478
+ if (source.loadSymbolsFromPath) {
3479
+ target.loadSymbolsFromPath = true;
3480
+ }
3481
+ if (!source.isUnresolved) {
3482
+ delete target.isUnresolved;
3483
+ }
3484
+ source.implicitImports?.forEach((implicitImport, name) => {
3485
+ let targetImplicitImport = target.implicitImports?.get(name);
3486
+ if (!targetImplicitImport) {
3487
+ if (!target.implicitImports) {
3488
+ target.implicitImports = new Map();
3489
+ }
3490
+ targetImplicitImport = this._cloneModuleLoaderActions(implicitImport);
3491
+ target.implicitImports.set(name, targetImplicitImport);
3492
+ return;
3493
+ }
3494
+ this._mergeModuleLoaderActions(targetImplicitImport, implicitImport);
3495
+ });
3496
+ }
3280
3497
  // Handles some special-case assignment statements that are found
3281
3498
  // within the typings.pyi file.
3282
3499
  _handleTypingStubAssignmentOrAnnotation(node) {