Skip to content

Commit f5f21cf

Browse files
authored
Merge pull request #508 from MichaReiser/id-manual-debug-impl
Manual `Debug` impl for `salsa::Id`
2 parents b8bbf96 + 6975a47 commit f5f21cf

18 files changed

+142
-138
lines changed

components/salsa-macro-rules/src/setup_input_struct.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,14 @@ macro_rules! setup_input_struct {
189189
$zalsa::with_attached_database(|db| {
190190
let fields = $Configuration::ingredient(db).leak_fields(this);
191191
let mut f = f.debug_struct(stringify!($Struct));
192-
let f = f.field("[salsa id]", &$zalsa::AsId::as_id(&this).as_u32());
192+
let f = f.field("[salsa id]", &$zalsa::AsId::as_id(&this));
193193
$(
194194
let f = f.field(stringify!($field_id), &fields.$field_index);
195195
)*
196196
f.finish()
197197
}).unwrap_or_else(|| {
198198
f.debug_struct(stringify!($Struct))
199-
.field("[salsa id]", &this.0.as_u32())
199+
.field("[salsa id]", &this.0)
200200
.finish()
201201
})
202202
}

components/salsa-macro-rules/src/setup_tracked_struct.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,14 @@ macro_rules! setup_tracked_struct {
219219
$zalsa::with_attached_database(|db| {
220220
let fields = $Configuration::ingredient(db).leak_fields(this);
221221
let mut f = f.debug_struct(stringify!($Struct));
222-
let f = f.field("[salsa id]", &$zalsa::AsId::as_id(&this).as_u32());
222+
let f = f.field("[salsa id]", &$zalsa::AsId::as_id(&this));
223223
$(
224224
let f = f.field(stringify!($field_id), &fields.$field_index);
225225
)*
226226
f.finish()
227227
}).unwrap_or_else(|| {
228228
f.debug_struct(stringify!($Struct))
229-
.field("[salsa id]", &$zalsa::AsId::as_id(&this).as_u32())
229+
.field("[salsa id]", &$zalsa::AsId::as_id(&this))
230230
.finish()
231231
})
232232
}

examples/calc/parser.rs

Lines changed: 41 additions & 41 deletions
Large diffs are not rendered by default.

src/id.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::Database;
1212
/// You will rarely use the `Id` type directly, though you can.
1313
/// You are more likely to use types that implement the `AsId` trait,
1414
/// such as entity keys.
15-
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
15+
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
1616
pub struct Id {
1717
value: NonZeroU32,
1818
}
@@ -42,6 +42,12 @@ impl Id {
4242
}
4343
}
4444

45+
impl Debug for Id {
46+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47+
write!(f, "Id({})", self.as_u32())
48+
}
49+
}
50+
4551
impl From<u32> for Id {
4652
fn from(n: u32) -> Self {
4753
Id::from_u32(n)

tests/accumulate-reuse-workaround.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ fn test1() {
8181
assert_eq!(compute(&db, l2), 2);
8282
db.assert_logs(expect![[r#"
8383
[
84-
"compute(List { [salsa id]: 1, value: 2, next: Some(List { [salsa id]: 0, value: 1, next: None }) })",
85-
"accumulated(List { [salsa id]: 0, value: 1, next: None })",
86-
"compute(List { [salsa id]: 0, value: 1, next: None })",
84+
"compute(List { [salsa id]: Id(1), value: 2, next: Some(List { [salsa id]: Id(0), value: 1, next: None }) })",
85+
"accumulated(List { [salsa id]: Id(0), value: 1, next: None })",
86+
"compute(List { [salsa id]: Id(0), value: 1, next: None })",
8787
]"#]]);
8888

8989
// When we mutate `l1`, we should re-execute `compute` for `l1`,
@@ -93,7 +93,7 @@ fn test1() {
9393
assert_eq!(compute(&db, l2), 2);
9494
db.assert_logs(expect![[r#"
9595
[
96-
"accumulated(List { [salsa id]: 0, value: 2, next: None })",
97-
"compute(List { [salsa id]: 0, value: 2, next: None })",
96+
"accumulated(List { [salsa id]: Id(0), value: 2, next: None })",
97+
"compute(List { [salsa id]: Id(0), value: 2, next: None })",
9898
]"#]]);
9999
}

tests/accumulate-reuse.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ fn test1() {
7272
assert_eq!(compute(&db, l2), 2);
7373
db.assert_logs(expect![[r#"
7474
[
75-
"compute(List { [salsa id]: 1, value: 2, next: Some(List { [salsa id]: 0, value: 1, next: None }) })",
76-
"compute(List { [salsa id]: 0, value: 1, next: None })",
75+
"compute(List { [salsa id]: Id(1), value: 2, next: Some(List { [salsa id]: Id(0), value: 1, next: None }) })",
76+
"compute(List { [salsa id]: Id(0), value: 1, next: None })",
7777
]"#]]);
7878

7979
// When we mutate `l1`, we should re-execute `compute` for `l1`,
@@ -84,7 +84,7 @@ fn test1() {
8484
assert_eq!(compute(&db, l2), 2);
8585
db.assert_logs(expect![[r#"
8686
[
87-
"compute(List { [salsa id]: 1, value: 2, next: Some(List { [salsa id]: 0, value: 2, next: None }) })",
88-
"compute(List { [salsa id]: 0, value: 2, next: None })",
87+
"compute(List { [salsa id]: Id(1), value: 2, next: Some(List { [salsa id]: Id(0), value: 2, next: None }) })",
88+
"compute(List { [salsa id]: Id(0), value: 2, next: None })",
8989
]"#]]);
9090
}

tests/debug.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ fn input() {
3939

4040
// debug includes all fields
4141
let actual = format!("{complex_struct:?}");
42-
let expected = expect![[
43-
r#"ComplexStruct { [salsa id]: 0, my_input: MyInput { [salsa id]: 0, field: 22 }, not_salsa: NotSalsa { field: "it's salsa time" } }"#
44-
]];
42+
let expected = expect![[r#"ComplexStruct { [salsa id]: Id(0), my_input: MyInput { [salsa id]: Id(0), field: 22 }, not_salsa: NotSalsa { field: "it's salsa time" } }"#]];
4543
expected.assert_eq(&actual);
4644
})
4745
}
@@ -62,7 +60,7 @@ fn untracked_dependencies() {
6260

6361
let s = leak_debug_string(&db, input);
6462
expect![[r#"
65-
"MyInput { [salsa id]: 0, field: 22 }"
63+
"MyInput { [salsa id]: Id(0), field: 22 }"
6664
"#]]
6765
.assert_debug_eq(&s);
6866

@@ -103,7 +101,7 @@ fn custom_debug_impl() {
103101

104102
let s = leak_derived_custom(&db, input, 23);
105103
expect![[r#"
106-
"MyInput { [salsa id]: 0, field: 22 } / 23"
104+
"MyInput { [salsa id]: Id(0), field: 22 } / 23"
107105
"#]]
108106
.assert_debug_eq(&s);
109107
}

tests/deletion-cascade.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ fn basic() {
8989
assert_eq!(final_result(&db, input), 2 * 2 + 2);
9090
db.assert_logs(expect![[r#"
9191
[
92-
"final_result(MyInput { [salsa id]: 0, field: 3 })",
93-
"intermediate_result(MyInput { [salsa id]: 0, field: 3 })",
92+
"final_result(MyInput { [salsa id]: Id(0), field: 3 })",
93+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 3 })",
9494
]"#]]);
9595

9696
// Creates only 2 tracked structs in this revision, should delete 1
@@ -111,12 +111,12 @@ fn basic() {
111111
assert_eq!(final_result(&db, input), 2);
112112
db.assert_logs(expect![[r#"
113113
[
114-
"intermediate_result(MyInput { [salsa id]: 0, field: 2 })",
114+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 2 })",
115115
"salsa_event(WillDiscardStaleOutput { execute_key: create_tracked_structs(0), output_key: MyTracked(2) })",
116116
"salsa_event(DidDiscard { key: MyTracked(2) })",
117117
"salsa_event(DidDiscard { key: contribution_from_struct(2) })",
118118
"salsa_event(DidDiscard { key: MyTracked(5) })",
119119
"salsa_event(DidDiscard { key: copy_field(5) })",
120-
"final_result(MyInput { [salsa id]: 0, field: 2 })",
120+
"final_result(MyInput { [salsa id]: Id(0), field: 2 })",
121121
]"#]]);
122122
}

tests/deletion.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ fn basic() {
8383
assert_eq!(final_result(&db, input), 2 * 2 + 2);
8484
db.assert_logs(expect![[r#"
8585
[
86-
"final_result(MyInput { [salsa id]: 0, field: 3 })",
87-
"intermediate_result(MyInput { [salsa id]: 0, field: 3 })",
86+
"final_result(MyInput { [salsa id]: Id(0), field: 3 })",
87+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 3 })",
8888
]"#]]);
8989

9090
// Creates only 2 tracked structs in this revision, should delete 1
@@ -98,10 +98,10 @@ fn basic() {
9898
assert_eq!(final_result(&db, input), 2);
9999
db.assert_logs(expect![[r#"
100100
[
101-
"intermediate_result(MyInput { [salsa id]: 0, field: 2 })",
101+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 2 })",
102102
"salsa_event(WillDiscardStaleOutput { execute_key: create_tracked_structs(0), output_key: MyTracked(2) })",
103103
"salsa_event(DidDiscard { key: MyTracked(2) })",
104104
"salsa_event(DidDiscard { key: contribution_from_struct(2) })",
105-
"final_result(MyInput { [salsa id]: 0, field: 2 })",
105+
"final_result(MyInput { [salsa id]: Id(0), field: 2 })",
106106
]"#]]);
107107
}

tests/elided-lifetime-in-tracked-fn.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ fn execute() {
6060
assert_eq!(final_result(&db, input), 22);
6161
db.assert_logs(expect![[r#"
6262
[
63-
"final_result(MyInput { [salsa id]: 0, field: 22 })",
64-
"intermediate_result(MyInput { [salsa id]: 0, field: 22 })",
63+
"final_result(MyInput { [salsa id]: Id(0), field: 22 })",
64+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 22 })",
6565
]"#]]);
6666

6767
// Intermediate result is the same, so final result does
@@ -70,14 +70,14 @@ fn execute() {
7070
assert_eq!(final_result(&db, input), 22);
7171
db.assert_logs(expect![[r#"
7272
[
73-
"intermediate_result(MyInput { [salsa id]: 0, field: 23 })",
73+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 23 })",
7474
]"#]]);
7575

7676
input.set_field(&mut db).to(24);
7777
assert_eq!(final_result(&db, input), 24);
7878
db.assert_logs(expect![[r#"
7979
[
80-
"intermediate_result(MyInput { [salsa id]: 0, field: 24 })",
81-
"final_result(MyInput { [salsa id]: 0, field: 24 })",
80+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 24 })",
81+
"final_result(MyInput { [salsa id]: Id(0), field: 24 })",
8282
]"#]]);
8383
}

tests/expect_reuse_field_x_of_a_tracked_struct_changes_but_fn_depends_on_field_y.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ fn execute() {
7474
assert_eq!(final_result_depends_on_x(&db, input), 22);
7575
db.assert_logs(expect![[r#"
7676
[
77-
"final_result_depends_on_x(MyInput { [salsa id]: 0, field: 22 })",
77+
"final_result_depends_on_x(MyInput { [salsa id]: Id(0), field: 22 })",
7878
]"#]]);
7979

8080
assert_eq!(final_result_depends_on_y(&db, input), 22);
8181
db.assert_logs(expect![[r#"
8282
[
83-
"final_result_depends_on_y(MyInput { [salsa id]: 0, field: 22 })",
83+
"final_result_depends_on_y(MyInput { [salsa id]: Id(0), field: 22 })",
8484
]"#]]);
8585

8686
input.set_field(&mut db).to(23);
@@ -90,7 +90,7 @@ fn execute() {
9090
assert_eq!(final_result_depends_on_x(&db, input), 24);
9191
db.assert_logs(expect![[r#"
9292
[
93-
"final_result_depends_on_x(MyInput { [salsa id]: 0, field: 23 })",
93+
"final_result_depends_on_x(MyInput { [salsa id]: Id(0), field: 23 })",
9494
]"#]]);
9595

9696
// y = 23 / 2 = 11

tests/expect_reuse_field_x_of_an_input_changes_but_fn_depends_on_field_y.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,21 @@ fn execute() {
5959
assert_eq!(result_depends_on_x(&db, input), 23);
6060
db.assert_logs(expect![[r#"
6161
[
62-
"result_depends_on_x(MyInput { [salsa id]: 0, x: 22, y: 33 })",
62+
"result_depends_on_x(MyInput { [salsa id]: Id(0), x: 22, y: 33 })",
6363
]"#]]);
6464

6565
assert_eq!(result_depends_on_y(&db, input), 32);
6666
db.assert_logs(expect![[r#"
6767
[
68-
"result_depends_on_y(MyInput { [salsa id]: 0, x: 22, y: 33 })",
68+
"result_depends_on_y(MyInput { [salsa id]: Id(0), x: 22, y: 33 })",
6969
]"#]]);
7070

7171
input.set_x(&mut db).to(23);
7272
// input x changes, so result depends on x needs to be recomputed;
7373
assert_eq!(result_depends_on_x(&db, input), 24);
7474
db.assert_logs(expect![[r#"
7575
[
76-
"result_depends_on_x(MyInput { [salsa id]: 0, x: 23, y: 33 })",
76+
"result_depends_on_x(MyInput { [salsa id]: Id(0), x: 23, y: 33 })",
7777
]"#]]);
7878

7979
// input y is the same, so result depends on y

tests/hello_world.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ fn execute() {
6060
assert_eq!(final_result(&db, input), 22);
6161
db.assert_logs(expect![[r#"
6262
[
63-
"final_result(MyInput { [salsa id]: 0, field: 22 })",
64-
"intermediate_result(MyInput { [salsa id]: 0, field: 22 })",
63+
"final_result(MyInput { [salsa id]: Id(0), field: 22 })",
64+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 22 })",
6565
]"#]]);
6666

6767
// Intermediate result is the same, so final result does
@@ -70,15 +70,15 @@ fn execute() {
7070
assert_eq!(final_result(&db, input), 22);
7171
db.assert_logs(expect![[r#"
7272
[
73-
"intermediate_result(MyInput { [salsa id]: 0, field: 23 })",
73+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 23 })",
7474
]"#]]);
7575

7676
input.set_field(&mut db).to(24);
7777
assert_eq!(final_result(&db, input), 24);
7878
db.assert_logs(expect![[r#"
7979
[
80-
"intermediate_result(MyInput { [salsa id]: 0, field: 24 })",
81-
"final_result(MyInput { [salsa id]: 0, field: 24 })",
80+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 24 })",
81+
"final_result(MyInput { [salsa id]: Id(0), field: 24 })",
8282
]"#]]);
8383
}
8484

@@ -91,8 +91,8 @@ fn red_herring() {
9191
assert_eq!(final_result(&db, input), 22);
9292
db.assert_logs(expect![[r#"
9393
[
94-
"final_result(MyInput { [salsa id]: 0, field: 22 })",
95-
"intermediate_result(MyInput { [salsa id]: 0, field: 22 })",
94+
"final_result(MyInput { [salsa id]: Id(0), field: 22 })",
95+
"intermediate_result(MyInput { [salsa id]: Id(0), field: 22 })",
9696
]"#]]);
9797

9898
// Create a distinct input and mutate it.

tests/singleton.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fn debug() {
6161
Database::default().attach(|db| {
6262
let input = MyInput::new(db, 3, 4);
6363
let actual = format!("{:?}", input);
64-
let expected = expect!["MyInput { [salsa id]: 0, field: 3, id_field: 4 }"];
64+
let expected = expect!["MyInput { [salsa id]: Id(0), field: 3, id_field: 4 }"];
6565
expected.assert_eq(&actual);
6666
});
6767
}

0 commit comments

Comments
 (0)