mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't consider imported element as private if it is presented in dunder all (PY-46169)
GitOrigin-RevId: b9f22ea3c7619f9db5b06e321ed3fe46cbaaea60
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9db384e71d
commit
09c1f70856
@@ -46,8 +46,9 @@ class PyiFile(viewProvider: FileViewProvider) : PyFileImpl(viewProvider, PyiLang
|
||||
if (exported && isPrivateName(name) && !resolvingBuiltinPathLike(name)) return emptyList()
|
||||
|
||||
val baseResults = super.multiResolveName(name, exported)
|
||||
val dunderAll = dunderAll ?: emptyList()
|
||||
return if (exported)
|
||||
baseResults.filterNot { isPrivateImport((it as? ImportedResolveResult)?.definer) }
|
||||
baseResults.filterNot { isPrivateImport((it as? ImportedResolveResult)?.definer, dunderAll) }
|
||||
else
|
||||
baseResults
|
||||
}
|
||||
@@ -56,9 +57,10 @@ class PyiFile(viewProvider: FileViewProvider) : PyFileImpl(viewProvider, PyiLang
|
||||
resolveState: ResolveState,
|
||||
lastParent: PsiElement?,
|
||||
place: PsiElement): Boolean {
|
||||
val dunderAll = dunderAll ?: emptyList()
|
||||
val wrapper = object : DelegatingScopeProcessor(processor) {
|
||||
override fun execute(element: PsiElement, state: ResolveState): Boolean = when {
|
||||
isPrivateImport(element) -> true
|
||||
isPrivateImport(element, dunderAll) -> true
|
||||
element is PsiNamedElement && isPrivateName(element.name) -> true
|
||||
else -> super.execute(element, state)
|
||||
}
|
||||
@@ -68,7 +70,9 @@ class PyiFile(viewProvider: FileViewProvider) : PyFileImpl(viewProvider, PyiLang
|
||||
|
||||
private fun isPrivateName(name: String?) = PyUtil.getInitialUnderscores(name) == 1
|
||||
|
||||
private fun isPrivateImport(element: PsiElement?) = element is PyImportElement && element.asName == null
|
||||
private fun isPrivateImport(element: PsiElement?, dunderAll: List<String>): Boolean {
|
||||
return element is PyImportElement && element.asName == null && element.visibleName !in dunderAll
|
||||
}
|
||||
|
||||
private fun resolvingBuiltinPathLike(name: String): Boolean {
|
||||
return name == PyNames.BUILTIN_PATH_LIKE && PyBuiltinCache.getInstance(this).builtinsFile == this
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
from m1 import <error descr="Cannot find reference 'foo' in 'm1.pyi'">foo</error>
|
||||
from m1 import <error descr="Cannot find reference 'bar' in 'm1.pyi'">bar</error>
|
||||
from m1 import bar_imported
|
||||
from m1 import baz
|
||||
from m1 import <error descr="Cannot find reference 'm2' in 'm1.pyi'">m2</error>
|
||||
from m1 import m2_imported
|
||||
|
||||
print(foo, bar, bar_imported, m2, m2_imported)
|
||||
print(foo, bar, bar_imported, baz, m2, m2_imported)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
from m2 import foo
|
||||
from m2 import bar as bar_imported
|
||||
from m2 import baz
|
||||
import m2
|
||||
import m2 as m2_imported
|
||||
import m2 as m2_imported
|
||||
|
||||
__all__ = ["baz"]
|
||||
Reference in New Issue
Block a user