fix: Fix tuple structs not rendering visibility in their fields
This commit is contained in:
parent
c48f145535
commit
81ea48a573
@ -158,7 +158,8 @@ impl HirDisplay for Adt {
|
|||||||
|
|
||||||
impl HirDisplay for Struct {
|
impl HirDisplay for Struct {
|
||||||
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
|
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 ")?;
|
f.write_str("struct ")?;
|
||||||
write!(f, "{}", self.name(f.db).display(f.db.upcast()))?;
|
write!(f, "{}", self.name(f.db).display(f.db.upcast()))?;
|
||||||
let def_id = GenericDefId::AdtId(AdtId::StructId(self.id));
|
let def_id = GenericDefId::AdtId(AdtId::StructId(self.id));
|
||||||
@ -171,6 +172,7 @@ impl HirDisplay for Struct {
|
|||||||
|
|
||||||
while let Some((id, _)) = it.next() {
|
while let Some((id, _)) = it.next() {
|
||||||
let field = Field { parent: (*self).into(), id };
|
let field = Field { parent: (*self).into(), id };
|
||||||
|
write_visibility(module_id, field.visibility(f.db), f)?;
|
||||||
field.ty(f.db).hir_fmt(f)?;
|
field.ty(f.db).hir_fmt(f)?;
|
||||||
if it.peek().is_some() {
|
if it.peek().is_some() {
|
||||||
f.write_str(", ")?;
|
f.write_str(", ")?;
|
||||||
|
@ -702,7 +702,7 @@ fn hover_shows_struct_field_info() {
|
|||||||
// Hovering over the field when instantiating
|
// Hovering over the field when instantiating
|
||||||
check(
|
check(
|
||||||
r#"
|
r#"
|
||||||
struct Foo { field_a: u32 }
|
struct Foo { pub field_a: u32 }
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let foo = Foo { field_a$0: 0, };
|
let foo = Foo { field_a$0: 0, };
|
||||||
@ -717,7 +717,7 @@ fn main() {
|
|||||||
|
|
||||||
```rust
|
```rust
|
||||||
// size = 4, align = 4, offset = 0
|
// 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
|
// Hovering over the field in the definition
|
||||||
check(
|
check(
|
||||||
r#"
|
r#"
|
||||||
struct Foo { field_a$0: u32 }
|
struct Foo { pub field_a$0: u32 }
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let foo = Foo { field_a: 0 };
|
let foo = Foo { field_a: 0 };
|
||||||
@ -740,7 +740,74 @@ fn main() {
|
|||||||
|
|
||||||
```rust
|
```rust
|
||||||
// size = 4, align = 4, offset = 0
|
// 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);
|
||||||
```
|
```
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user