fix: Fix tuple structs not rendering visibility in their fields

This commit is contained in:
Lukas Wirth 2024-02-08 10:05:28 +01:00
parent c48f145535
commit 81ea48a573
2 changed files with 74 additions and 5 deletions

View File

@ -158,7 +158,8 @@ fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
impl HirDisplay for Struct {
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
write_visibility(self.module(f.db).id, self.visibility(f.db), f)?;
let module_id = self.module(f.db).id;
write_visibility(module_id, self.visibility(f.db), f)?;
f.write_str("struct ")?;
write!(f, "{}", self.name(f.db).display(f.db.upcast()))?;
let def_id = GenericDefId::AdtId(AdtId::StructId(self.id));
@ -171,6 +172,7 @@ fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
while let Some((id, _)) = it.next() {
let field = Field { parent: (*self).into(), id };
write_visibility(module_id, field.visibility(f.db), f)?;
field.ty(f.db).hir_fmt(f)?;
if it.peek().is_some() {
f.write_str(", ")?;

View File

@ -702,7 +702,7 @@ fn hover_shows_struct_field_info() {
// Hovering over the field when instantiating
check(
r#"
struct Foo { field_a: u32 }
struct Foo { pub field_a: u32 }
fn main() {
let foo = Foo { field_a$0: 0, };
@ -717,7 +717,7 @@ fn main() {
```rust
// size = 4, align = 4, offset = 0
field_a: u32
pub field_a: u32
```
"#]],
);
@ -725,7 +725,7 @@ fn main() {
// Hovering over the field in the definition
check(
r#"
struct Foo { field_a$0: u32 }
struct Foo { pub field_a$0: u32 }
fn main() {
let foo = Foo { field_a: 0 };
@ -740,7 +740,74 @@ fn main() {
```rust
// size = 4, align = 4, offset = 0
field_a: u32
pub field_a: u32
```
"#]],
);
}
#[test]
fn hover_shows_tuple_struct_field_info() {
check(
r#"
struct Foo(pub u32)
fn main() {
let foo = Foo { 0$0: 0, };
}
"#,
expect![[r#"
*0*
```rust
test::Foo
```
```rust
// size = 4, align = 4, offset = 0
pub 0: u32
```
"#]],
);
check(
r#"
struct Foo(pub u32)
fn foo(foo: Foo) {
foo.0$0;
}
"#,
expect![[r#"
*0*
```rust
test::Foo
```
```rust
// size = 4, align = 4, offset = 0
pub 0: u32
```
"#]],
);
}
#[test]
fn hover_tuple_struct() {
check(
r#"
struct Foo$0(pub u32)
"#,
expect![[r#"
*Foo*
```rust
test
```
```rust
// size = 4, align = 4
struct Foo(pub u32);
```
"#]],
);