From 32f44d921adcdf215045da5f6b9fd4094d60da3a Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Wed, 12 Jun 2024 14:01:56 -0700 Subject: [PATCH] Changed the behavior of double underscored symbols that are part of a module's namespace when that module is not a stub or in a "py.typed" package. Such symbols are no longer ignored, although they are considered private. This addresses #8131. (#8132) --- packages/pyright-internal/src/analyzer/binder.ts | 8 ++++++-- .../tests/fourslash/rename.externallyHidden.fourslash.ts | 4 ++-- .../fourslash/rename.externallyHidden.params.fourslash.ts | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/pyright-internal/src/analyzer/binder.ts b/packages/pyright-internal/src/analyzer/binder.ts index 7ed7bdf6f..48482f510 100644 --- a/packages/pyright-internal/src/analyzer/binder.ts +++ b/packages/pyright-internal/src/analyzer/binder.ts @@ -3455,8 +3455,12 @@ export class Binder extends ParseTreeWalker { if (this._currentScope.type === ScopeType.Module || this._currentScope.type === ScopeType.Builtin) { if (isPrivateOrProtectedName(name)) { if (isPrivateName(name)) { - // Private names are obscured, so they are always externally hidden. - symbol.setIsExternallyHidden(); + // Private names within classes are mangled, so they are always externally hidden. + if (scope.type === ScopeType.Class) { + symbol.setIsExternallyHidden(); + } else { + this._potentialPrivateSymbols.set(name, symbol); + } } else if (this._fileInfo.isStubFile || this._fileInfo.isInPyTypedPackage) { if (this._currentScope.type === ScopeType.Builtin) { // Don't include private-named symbols in the builtin scope. diff --git a/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.fourslash.ts b/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.fourslash.ts index eb324d865..09825415d 100644 --- a/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.fourslash.ts +++ b/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.fourslash.ts @@ -7,9 +7,9 @@ //// [|__foo/*marker*/|]() // @filename: test2.py -//// from test1 import __foo +//// from test1 import [|__foo|] //// -//// __foo() +//// [|__foo|]() helper.verifyRename({ marker: { diff --git a/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts b/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts index a8051f710..f5fbae881 100644 --- a/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts +++ b/packages/pyright-internal/src/tests/fourslash/rename.externallyHidden.params.fourslash.ts @@ -9,7 +9,7 @@ // @filename: test2.py //// from test1 import __foo //// -//// __foo(param=1) +//// __foo([|param|]=1) helper.verifyRename({ marker: {