mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 22:01:18 +00:00
[ty] Filter out private type aliases from stub files when offering autocomplete suggestions (#19282)
This commit is contained in:
parent
5bc81f26c8
commit
a67630f907
6 changed files with 38 additions and 6 deletions
|
@ -536,6 +536,9 @@ _private_type_var_tuple = TypeVarTuple("_private_type_var_tuple")
|
||||||
public_explicit_type_alias: TypeAlias = Literal[1]
|
public_explicit_type_alias: TypeAlias = Literal[1]
|
||||||
_private_explicit_type_alias: TypeAlias = Literal[1]
|
_private_explicit_type_alias: TypeAlias = Literal[1]
|
||||||
|
|
||||||
|
public_implicit_union_alias = int | str
|
||||||
|
_private_implicit_union_alias = int | str
|
||||||
|
|
||||||
class PublicProtocol(Protocol):
|
class PublicProtocol(Protocol):
|
||||||
def method(self) -> None: ...
|
def method(self) -> None: ...
|
||||||
|
|
||||||
|
@ -557,7 +560,9 @@ class _PrivateProtocol(Protocol):
|
||||||
test.assert_completions_include("public_type_var_tuple");
|
test.assert_completions_include("public_type_var_tuple");
|
||||||
test.assert_completions_do_not_include("_private_type_var_tuple");
|
test.assert_completions_do_not_include("_private_type_var_tuple");
|
||||||
test.assert_completions_include("public_explicit_type_alias");
|
test.assert_completions_include("public_explicit_type_alias");
|
||||||
test.assert_completions_include("_private_explicit_type_alias");
|
test.assert_completions_do_not_include("_private_explicit_type_alias");
|
||||||
|
test.assert_completions_include("public_implicit_union_alias");
|
||||||
|
test.assert_completions_do_not_include("_private_implicit_union_alias");
|
||||||
test.assert_completions_include("PublicProtocol");
|
test.assert_completions_include("PublicProtocol");
|
||||||
test.assert_completions_do_not_include("_PrivateProtocol");
|
test.assert_completions_do_not_include("_PrivateProtocol");
|
||||||
}
|
}
|
||||||
|
|
|
@ -4995,7 +4995,7 @@ impl<'db> Type<'db> {
|
||||||
TypeVarKind::Legacy,
|
TypeVarKind::Legacy,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
SpecialFormType::TypeAlias => Ok(todo_type!("Support for `typing.TypeAlias`")),
|
SpecialFormType::TypeAlias => Ok(Type::Dynamic(DynamicType::TodoTypeAlias)),
|
||||||
SpecialFormType::TypedDict => Ok(todo_type!("Support for `typing.TypedDict`")),
|
SpecialFormType::TypedDict => Ok(todo_type!("Support for `typing.TypedDict`")),
|
||||||
|
|
||||||
SpecialFormType::Literal
|
SpecialFormType::Literal
|
||||||
|
@ -5880,6 +5880,9 @@ pub enum DynamicType {
|
||||||
/// A special Todo-variant for PEP-695 `ParamSpec` types. A temporary variant to detect and special-
|
/// A special Todo-variant for PEP-695 `ParamSpec` types. A temporary variant to detect and special-
|
||||||
/// case the handling of these types in `Callable` annotations.
|
/// case the handling of these types in `Callable` annotations.
|
||||||
TodoPEP695ParamSpec,
|
TodoPEP695ParamSpec,
|
||||||
|
/// A special Todo-variant for type aliases declared using `typing.TypeAlias`.
|
||||||
|
/// A temporary variant to detect and special-case the handling of these aliases in autocomplete suggestions.
|
||||||
|
TodoTypeAlias,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DynamicType {
|
impl DynamicType {
|
||||||
|
@ -5904,6 +5907,13 @@ impl std::fmt::Display for DynamicType {
|
||||||
f.write_str("@Todo")
|
f.write_str("@Todo")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
DynamicType::TodoTypeAlias => {
|
||||||
|
if cfg!(debug_assertions) {
|
||||||
|
f.write_str("@Todo(Support for `typing.TypeAlias`)")
|
||||||
|
} else {
|
||||||
|
f.write_str("@Todo")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,11 @@ impl<'db> ClassBase<'db> {
|
||||||
ClassBase::Class(class) => class.name(db),
|
ClassBase::Class(class) => class.name(db),
|
||||||
ClassBase::Dynamic(DynamicType::Any) => "Any",
|
ClassBase::Dynamic(DynamicType::Any) => "Any",
|
||||||
ClassBase::Dynamic(DynamicType::Unknown) => "Unknown",
|
ClassBase::Dynamic(DynamicType::Unknown) => "Unknown",
|
||||||
ClassBase::Dynamic(DynamicType::Todo(_) | DynamicType::TodoPEP695ParamSpec) => "@Todo",
|
ClassBase::Dynamic(
|
||||||
|
DynamicType::Todo(_)
|
||||||
|
| DynamicType::TodoPEP695ParamSpec
|
||||||
|
| DynamicType::TodoTypeAlias,
|
||||||
|
) => "@Todo",
|
||||||
ClassBase::Protocol => "Protocol",
|
ClassBase::Protocol => "Protocol",
|
||||||
ClassBase::Generic => "Generic",
|
ClassBase::Generic => "Generic",
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use crate::semantic_index::{
|
||||||
};
|
};
|
||||||
use crate::types::call::CallArguments;
|
use crate::types::call::CallArguments;
|
||||||
use crate::types::signatures::Signature;
|
use crate::types::signatures::Signature;
|
||||||
use crate::types::{ClassBase, ClassLiteral, KnownClass, KnownInstanceType, Type};
|
use crate::types::{ClassBase, ClassLiteral, DynamicType, KnownClass, KnownInstanceType, Type};
|
||||||
use crate::{Db, HasType, NameKind, SemanticModel};
|
use crate::{Db, HasType, NameKind, SemanticModel};
|
||||||
use ruff_db::files::File;
|
use ruff_db::files::File;
|
||||||
use ruff_python_ast as ast;
|
use ruff_python_ast as ast;
|
||||||
|
@ -181,6 +181,7 @@ impl<'db> AllMembers<'db> {
|
||||||
KnownClass::TypeVar
|
KnownClass::TypeVar
|
||||||
| KnownClass::TypeVarTuple
|
| KnownClass::TypeVarTuple
|
||||||
| KnownClass::ParamSpec
|
| KnownClass::ParamSpec
|
||||||
|
| KnownClass::UnionType
|
||||||
)
|
)
|
||||||
) =>
|
) =>
|
||||||
{
|
{
|
||||||
|
@ -190,6 +191,7 @@ impl<'db> AllMembers<'db> {
|
||||||
Type::KnownInstance(
|
Type::KnownInstance(
|
||||||
KnownInstanceType::TypeVar(_) | KnownInstanceType::TypeAliasType(_),
|
KnownInstanceType::TypeVar(_) | KnownInstanceType::TypeAliasType(_),
|
||||||
) => continue,
|
) => continue,
|
||||||
|
Type::Dynamic(DynamicType::TodoTypeAlias) => continue,
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6390,13 +6390,21 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||||
(unknown @ Type::Dynamic(DynamicType::Unknown), _, _)
|
(unknown @ Type::Dynamic(DynamicType::Unknown), _, _)
|
||||||
| (_, unknown @ Type::Dynamic(DynamicType::Unknown), _) => Some(unknown),
|
| (_, unknown @ Type::Dynamic(DynamicType::Unknown), _) => Some(unknown),
|
||||||
(
|
(
|
||||||
todo @ Type::Dynamic(DynamicType::Todo(_) | DynamicType::TodoPEP695ParamSpec),
|
todo @ Type::Dynamic(
|
||||||
|
DynamicType::Todo(_)
|
||||||
|
| DynamicType::TodoPEP695ParamSpec
|
||||||
|
| DynamicType::TodoTypeAlias,
|
||||||
|
),
|
||||||
_,
|
_,
|
||||||
_,
|
_,
|
||||||
)
|
)
|
||||||
| (
|
| (
|
||||||
_,
|
_,
|
||||||
todo @ Type::Dynamic(DynamicType::Todo(_) | DynamicType::TodoPEP695ParamSpec),
|
todo @ Type::Dynamic(
|
||||||
|
DynamicType::Todo(_)
|
||||||
|
| DynamicType::TodoPEP695ParamSpec
|
||||||
|
| DynamicType::TodoTypeAlias,
|
||||||
|
),
|
||||||
_,
|
_,
|
||||||
) => Some(todo),
|
) => Some(todo),
|
||||||
(Type::Never, _, _) | (_, Type::Never, _) => Some(Type::Never),
|
(Type::Never, _, _) | (_, Type::Never, _) => Some(Type::Never),
|
||||||
|
|
|
@ -250,6 +250,9 @@ fn dynamic_elements_ordering(left: DynamicType, right: DynamicType) -> Ordering
|
||||||
|
|
||||||
(DynamicType::TodoPEP695ParamSpec, _) => Ordering::Less,
|
(DynamicType::TodoPEP695ParamSpec, _) => Ordering::Less,
|
||||||
(_, DynamicType::TodoPEP695ParamSpec) => Ordering::Greater,
|
(_, DynamicType::TodoPEP695ParamSpec) => Ordering::Greater,
|
||||||
|
|
||||||
|
(DynamicType::TodoTypeAlias, _) => Ordering::Less,
|
||||||
|
(_, DynamicType::TodoTypeAlias) => Ordering::Greater,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue