Skip to content

Commit

Permalink
fix: Fix tuple structs not rendering visibility in their fields
Browse files Browse the repository at this point in the history
  • Loading branch information
Veykril committed Feb 8, 2024
1 parent c48f145 commit 81ea48a
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 5 deletions.
4 changes: 3 additions & 1 deletion crates/hir/src/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,8 @@ impl HirDisplay for Adt {

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));
Expand All @@ -171,6 +172,7 @@ impl HirDisplay for Struct {

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(", ")?;
Expand Down
75 changes: 71 additions & 4 deletions crates/ide/src/hover/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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, };
Expand All @@ -717,15 +717,15 @@ fn main() {
```rust
// size = 4, align = 4, offset = 0
field_a: u32
pub field_a: u32
```
"#]],
);

// 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 };
Expand All @@ -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);
```
"#]],
);
Expand Down

0 comments on commit 81ea48a

Please sign in to comment.