Skip to content

Commit 3f49263

Browse files
fix: add object_expression/object_member support to reformatter (#5776)
# fix: add object_expression/object_member support to reformatter ## Summary The reformatter was missing handlers for `object_expression` and `object_member` rules, causing it to always fail when encountering object literals (e.g. partial index `where` clauses). ## Changes * `psl/schema-ast/src/reformat.rs` : Add `reformat_object_expression` and `reformat_object_member` functions * `psl/psl/tests/reformatter/` : Add corresponding test fixtures for object_expression and object_member. fix: prisma/prisma#29180
1 parent 0cae7ae commit 3f49263

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
model Post {
2+
id Int @id
3+
title String
4+
published Boolean
5+
6+
@@unique([title], where:{published:{not:false}})
7+
@@index([title], where:{published:true})
8+
@@index([title], where:{published:{not: false},id:{not: null}})
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
model Post {
2+
id Int @id
3+
title String
4+
published Boolean
5+
6+
@@unique([title], where: { published: { not: false } })
7+
@@index([title], where: { published: true })
8+
@@index([title], where: { published: { not: false }, id: { not: null } })
9+
}

psl/schema-ast/src/reformat.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,40 @@ fn reformat_expression(pair: Pair<'_>, target: &mut dyn LineWriteable) {
377377
Rule::path => target.write(current.as_str()),
378378
Rule::function_call => reformat_function_call(current, target),
379379
Rule::array_expression => reformat_array_expression(current, target),
380+
Rule::object_expression => reformat_object_expression(current, target),
381+
_ => unreachable(&current),
382+
}
383+
}
384+
}
385+
386+
fn reformat_object_expression(pair: Pair<'_>, target: &mut dyn LineWriteable) {
387+
target.write("{ ");
388+
let mut is_first_member = true;
389+
390+
for current in pair.into_inner() {
391+
match current.as_rule() {
392+
Rule::object_member => {
393+
if !is_first_member {
394+
target.write(", ");
395+
}
396+
reformat_object_member(current, target);
397+
is_first_member = false;
398+
}
399+
_ => unreachable(&current),
400+
}
401+
}
402+
403+
target.write(" }");
404+
}
405+
406+
fn reformat_object_member(pair: Pair<'_>, target: &mut dyn LineWriteable) {
407+
for current in pair.into_inner() {
408+
match current.as_rule() {
409+
Rule::identifier => {
410+
target.write(current.as_str());
411+
target.write(": ");
412+
}
413+
Rule::expression => reformat_expression(current, target),
380414
_ => unreachable(&current),
381415
}
382416
}

0 commit comments

Comments
 (0)