This commit is contained in:
Aria Desires 2025-12-16 16:37:01 -05:00 committed by GitHub
commit af2ba11e9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 52 additions and 27 deletions

View File

@ -1183,13 +1183,13 @@ def ab(a: str): ...
.build(); .build();
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
(a: int) -> Unknown def ab(a: int) -> Unknown
--------------------------------------------- ---------------------------------------------
the int overload the int overload
--------------------------------------------- ---------------------------------------------
```python ```python
(a: int) -> Unknown def ab(a: int) -> Unknown
``` ```
--- ---
the int overload the int overload
@ -1243,13 +1243,13 @@ def ab(a: str):
.build(); .build();
assert_snapshot!(test.hover(), @r#" assert_snapshot!(test.hover(), @r#"
(a: str) -> Unknown def ab(a: str) -> Unknown
--------------------------------------------- ---------------------------------------------
the int overload the int overload
--------------------------------------------- ---------------------------------------------
```python ```python
(a: str) -> Unknown def ab(a: str) -> Unknown
``` ```
--- ---
the int overload the int overload
@ -1303,7 +1303,7 @@ def ab(a: int):
.build(); .build();
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
( def ab(
a: int, a: int,
b: int b: int
) -> Unknown ) -> Unknown
@ -1312,7 +1312,7 @@ def ab(a: int):
--------------------------------------------- ---------------------------------------------
```python ```python
( def ab(
a: int, a: int,
b: int b: int
) -> Unknown ) -> Unknown
@ -1369,13 +1369,13 @@ def ab(a: int):
.build(); .build();
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
(a: int) -> Unknown def ab(a: int) -> Unknown
--------------------------------------------- ---------------------------------------------
the two arg overload the two arg overload
--------------------------------------------- ---------------------------------------------
```python ```python
(a: int) -> Unknown def ab(a: int) -> Unknown
``` ```
--- ---
the two arg overload the two arg overload
@ -1433,7 +1433,7 @@ def ab(a: int, *, c: int):
.build(); .build();
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
( def ab(
a: int, a: int,
*, *,
b: int b: int
@ -1443,7 +1443,7 @@ def ab(a: int, *, c: int):
--------------------------------------------- ---------------------------------------------
```python ```python
( def ab(
a: int, a: int,
*, *,
b: int b: int
@ -1505,7 +1505,7 @@ def ab(a: int, *, c: int):
.build(); .build();
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
( def ab(
a: int, a: int,
*, *,
c: int c: int
@ -1515,7 +1515,7 @@ def ab(a: int, *, c: int):
--------------------------------------------- ---------------------------------------------
```python ```python
( def ab(
a: int, a: int,
*, *,
c: int c: int
@ -1564,11 +1564,11 @@ def ab(a: int, *, c: int):
); );
assert_snapshot!(test.hover(), @r#" assert_snapshot!(test.hover(), @r#"
( def foo(
a: int, a: int,
b b
) -> Unknown ) -> Unknown
( def foo(
a: str, a: str,
b b
) -> Unknown ) -> Unknown
@ -1577,11 +1577,11 @@ def ab(a: int, *, c: int):
--------------------------------------------- ---------------------------------------------
```python ```python
( def foo(
a: int, a: int,
b b
) -> Unknown ) -> Unknown
( def foo(
a: str, a: str,
b b
) -> Unknown ) -> Unknown
@ -1628,15 +1628,15 @@ def ab(a: int, *, c: int):
); );
assert_snapshot!(test.hover(), @r#" assert_snapshot!(test.hover(), @r#"
(a: int) -> Unknown def foo(a: int) -> Unknown
(a: str) -> Unknown def foo(a: str) -> Unknown
--------------------------------------------- ---------------------------------------------
The first overload The first overload
--------------------------------------------- ---------------------------------------------
```python ```python
(a: int) -> Unknown def foo(a: int) -> Unknown
(a: str) -> Unknown def foo(a: str) -> Unknown
``` ```
--- ---
The first overload The first overload
@ -3233,12 +3233,12 @@ def function():
// TODO: We should only show the matching overload here. // TODO: We should only show the matching overload here.
// https://github.com/astral-sh/ty/issues/73 // https://github.com/astral-sh/ty/issues/73
assert_snapshot!(test.hover(), @r" assert_snapshot!(test.hover(), @r"
(other: Test, /) -> Test def __add__(other: Test, /) -> Test
(other: Other, /) -> Test def __add__(other: Other, /) -> Test
--------------------------------------------- ---------------------------------------------
```python ```python
(other: Test, /) -> Test def __add__(other: Test, /) -> Test
(other: Other, /) -> Test def __add__(other: Other, /) -> Test
``` ```
--------------------------------------------- ---------------------------------------------
info[hover]: Hovered content is info[hover]: Hovered content is

View File

@ -15,6 +15,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
use crate::Db; use crate::Db;
use crate::place::Place; use crate::place::Place;
use crate::semantic_index::definition::Definition;
use crate::types::class::{ClassLiteral, ClassType, GenericAlias}; use crate::types::class::{ClassLiteral, ClassType, GenericAlias};
use crate::types::function::{FunctionType, OverloadLiteral}; use crate::types::function::{FunctionType, OverloadLiteral};
use crate::types::generics::{GenericContext, Specialization}; use crate::types::generics::{GenericContext, Specialization};
@ -40,6 +41,9 @@ pub struct DisplaySettings<'db> {
pub qualified: Rc<FxHashMap<&'db str, QualificationLevel>>, pub qualified: Rc<FxHashMap<&'db str, QualificationLevel>>,
/// Whether long unions and literals are displayed in full /// Whether long unions and literals are displayed in full
pub preserve_full_unions: bool, pub preserve_full_unions: bool,
/// Disallow Signature printing to introduce a name
/// (presumably because we rendered one already)
pub disallow_signature_name: bool,
} }
impl<'db> DisplaySettings<'db> { impl<'db> DisplaySettings<'db> {
@ -75,6 +79,14 @@ impl<'db> DisplaySettings<'db> {
} }
} }
#[must_use]
pub fn disallow_signature_name(&self) -> Self {
Self {
disallow_signature_name: true,
..self.clone()
}
}
#[must_use] #[must_use]
pub fn from_possibly_ambiguous_types( pub fn from_possibly_ambiguous_types(
db: &'db dyn Db, db: &'db dyn Db,
@ -742,7 +754,7 @@ impl<'db> FmtDetailed<'db> for DisplayRepresentation<'db> {
type_parameters.fmt_detailed(f)?; type_parameters.fmt_detailed(f)?;
signature signature
.bind_self(self.db, Some(typing_self_ty)) .bind_self(self.db, Some(typing_self_ty))
.display_with(self.db, self.settings.clone()) .display_with(self.db, self.settings.disallow_signature_name())
.fmt_detailed(f) .fmt_detailed(f)
} }
signatures => { signatures => {
@ -1158,7 +1170,7 @@ impl<'db> FmtDetailed<'db> for DisplayOverloadLiteral<'db> {
write!(f, "{}", self.literal.name(self.db))?; write!(f, "{}", self.literal.name(self.db))?;
type_parameters.fmt_detailed(f)?; type_parameters.fmt_detailed(f)?;
signature signature
.display_with(self.db, self.settings.clone()) .display_with(self.db, self.settings.disallow_signature_name())
.fmt_detailed(f) .fmt_detailed(f)
} }
} }
@ -1205,7 +1217,7 @@ impl<'db> FmtDetailed<'db> for DisplayFunctionType<'db> {
write!(f, "{}", self.ty.name(self.db))?; write!(f, "{}", self.ty.name(self.db))?;
type_parameters.fmt_detailed(f)?; type_parameters.fmt_detailed(f)?;
signature signature
.display_with(self.db, self.settings.clone()) .display_with(self.db, self.settings.disallow_signature_name())
.fmt_detailed(f) .fmt_detailed(f)
} }
signatures => { signatures => {
@ -1624,6 +1636,7 @@ impl<'db> Signature<'db> {
settings: DisplaySettings<'db>, settings: DisplaySettings<'db>,
) -> DisplaySignature<'a, 'db> { ) -> DisplaySignature<'a, 'db> {
DisplaySignature { DisplaySignature {
definition: self.definition(),
parameters: self.parameters(), parameters: self.parameters(),
return_ty: self.return_ty, return_ty: self.return_ty,
db, db,
@ -1633,6 +1646,7 @@ impl<'db> Signature<'db> {
} }
pub(crate) struct DisplaySignature<'a, 'db> { pub(crate) struct DisplaySignature<'a, 'db> {
definition: Option<Definition<'db>>,
parameters: &'a Parameters<'db>, parameters: &'a Parameters<'db>,
return_ty: Option<Type<'db>>, return_ty: Option<Type<'db>>,
db: &'db dyn Db, db: &'db dyn Db,
@ -1660,6 +1674,17 @@ impl<'db> FmtDetailed<'db> for DisplaySignature<'_, 'db> {
// When we exit this function, write a marker signaling we're ending a signature // When we exit this function, write a marker signaling we're ending a signature
let mut f = f.with_detail(TypeDetail::SignatureEnd); let mut f = f.with_detail(TypeDetail::SignatureEnd);
// If we're multiline printing and a name hasn't been emitted, try to
// make one up to make things more pretty
if self.settings.multiline
&& !self.settings.disallow_signature_name
&& let Some(definition) = self.definition
&& let Some(name) = definition.name(self.db)
{
f.write_str("def ")?;
f.write_str(&name)?;
}
// Parameters // Parameters
self.parameters self.parameters
.display_with(self.db, self.settings.clone()) .display_with(self.db, self.settings.clone())