Skip to content
This repository was archived by the owner on Apr 24, 2021. It is now read-only.

Commit 8272931

Browse files
amiraliescristianoc
authored andcommitted
Support printing inline records
1 parent 60efec3 commit 8272931

File tree

1 file changed

+83
-80
lines changed

1 file changed

+83
-80
lines changed

src/rescript-editor-support/PrintType.re

Lines changed: 83 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ let space = Pretty.line(" ");
2222
let dedent = Pretty.back(2, "");
2323

2424
let str = (~len=?, s) => Pretty.text(~len?, s);
25-
let (@!) = Pretty.append;
25+
let (+++) = Pretty.append;
2626

2727
let sepdList = (sep, items, printItem) => {
2828
let rec recur = items =>
@@ -31,49 +31,49 @@ let sepdList = (sep, items, printItem) => {
3131
| [one] => printItem(one)
3232
| [one, ...more] =>
3333
let l = printItem(one);
34-
l @! sep @! recur(more);
34+
l +++ sep +++ recur(more);
3535
};
3636
recur(items);
3737
};
3838

3939
let commadList = (printItem, items) => {
40-
sepdList(str(",") @! space, items, printItem);
40+
sepdList(str(",") +++ space, items, printItem);
4141
};
4242

4343
let indentGroup = doc => Pretty.indent(2, Pretty.group(doc));
4444

4545
let tupleList = (items, printItem) => {
4646
str("(")
47-
@! indentGroup(break @! commadList(printItem, items) @! dedent)
48-
@! str(")");
47+
+++ indentGroup(break +++ commadList(printItem, items) +++ dedent)
48+
+++ str(")");
4949
};
5050

5151
let typeConstr = (items, printItem) =>
5252
if (rescript^) {
5353
str("<")
54-
@! indentGroup(break @! commadList(printItem, items) @! dedent)
55-
@! str(">");
54+
+++ indentGroup(break +++ commadList(printItem, items) +++ dedent)
55+
+++ str(">");
5656
} else {
5757
tupleList(items, printItem);
5858
};
5959

6060
let showArgs = (loop, args) => {
6161
str("(")
62-
@! indentGroup(
63-
break
64-
@! commadList(
65-
((label, typ)) => {
66-
switch (label) {
67-
| Asttypes.Nolabel => loop(typ)
68-
| Labelled(label)
69-
| Optional(label) => str("~" ++ label ++ ": ") @! loop(typ)
70-
}
71-
},
72-
args,
73-
)
74-
@! dedent,
75-
)
76-
@! str(")");
62+
+++ indentGroup(
63+
break
64+
+++ commadList(
65+
((label, typ)) => {
66+
switch (label) {
67+
| Asttypes.Nolabel => loop(typ)
68+
| Labelled(label)
69+
| Optional(label) => str("~" ++ label ++ ": ") +++ loop(typ)
70+
}
71+
},
72+
args,
73+
)
74+
+++ dedent,
75+
)
76+
+++ str(")");
7777
};
7878

7979
type namer = {
@@ -131,12 +131,12 @@ let rec print_expr = (~depth=0, typ) => {
131131
| _ => showArgs(innerExpr, args)
132132
}
133133
)
134-
@! str(" => ")
135-
@! innerExpr(result);
134+
+++ str(" => ")
135+
+++ innerExpr(result);
136136
| Ttuple(items) => tupleList(items, innerExpr)
137137
| Tconstr(path, args, _) =>
138138
print_path(path)
139-
@! (
139+
+++ (
140140
switch (args) {
141141
| [] => Pretty.empty
142142
| args => typeConstr(args, innerExpr)
@@ -147,27 +147,27 @@ let rec print_expr = (~depth=0, typ) => {
147147
| Tnil => str("(no type)")
148148
| Tvariant({row_fields}) =>
149149
str("[")
150-
@! indentGroup(
151-
break
152-
@! (List.length(row_fields) <= 1 ? str("| ") : str(" "))
153-
@! sepdList(
154-
space @! str("| "), row_fields, ((label, row_field)) =>
155-
switch (row_field) {
156-
| Rpresent(None)
157-
| Reither(_, [], _, _) => str("#" ++ label)
158-
| Rpresent(Some(t))
159-
| Reither(_, [t], _, _) =>
160-
str("#" ++ label)
161-
@! str("(")
162-
@! innerExpr(t)
163-
@! str(")")
164-
| Reither(_)
165-
| Rabsent => str("...")
166-
}
167-
),
168-
)
169-
@! str("]")
170-
@! break
150+
+++ indentGroup(
151+
break
152+
+++ (List.length(row_fields) <= 1 ? str("| ") : str(" "))
153+
+++ sepdList(
154+
space +++ str("| "), row_fields, ((label, row_field)) =>
155+
switch (row_field) {
156+
| Rpresent(None)
157+
| Reither(_, [], _, _) => str("#" ++ label)
158+
| Rpresent(Some(t))
159+
| Reither(_, [t], _, _) =>
160+
str("#" ++ label)
161+
+++ str("(")
162+
+++ innerExpr(t)
163+
+++ str(")")
164+
| Reither(_)
165+
| Rabsent => str("...")
166+
}
167+
),
168+
)
169+
+++ str("]")
170+
+++ break
171171
| Tfield(_, _, _, _)
172172
| Tunivar(_)
173173
| Tpoly(_, _)
@@ -188,76 +188,79 @@ let rec print_expr = (~depth=0, typ) => {
188188
and print_path = path =>
189189
switch (path) {
190190
| Path.Pident(id) => ident(id)
191-
| Pdot(path, name, _) => print_path(path) @! str("." ++ name)
191+
| Pdot(path, name, _) => print_path(path) +++ str("." ++ name)
192192
| Papply(_, _) => str("<apply>")
193193
};
194194

195+
let print_attr = ({Types.ld_id, ld_mutable, ld_type}) => {
196+
(
197+
switch (ld_mutable) {
198+
| Asttypes.Immutable => Pretty.empty
199+
| Mutable => str("mutable ")
200+
}
201+
)
202+
+++ ident(ld_id)
203+
+++ str(": ")
204+
+++ print_expr(ld_type);
205+
};
206+
195207
let print_constructor = (loop, {Types.cd_id, cd_args, cd_res}) => {
196208
let name = Ident.name(cd_id);
197209
str(name)
198-
@! (
210+
+++ (
199211
switch (cd_args) {
200212
| Cstr_tuple([]) => Pretty.empty
201-
| Cstr_record(_) => str("{...printing not supported...}")
213+
| Cstr_record(labels) =>
214+
str("({")
215+
+++ indentGroup(break +++ commadList(print_attr, labels) +++ dedent)
216+
+++ str("})")
202217
| Cstr_tuple(args) => tupleList(args, loop)
203218
}
204219
)
205-
@! (
220+
+++ (
206221
switch (cd_res) {
207222
| None => Pretty.empty
208-
| Some(typ) => str(": ") @! loop(typ)
223+
| Some(typ) => str(": ") +++ loop(typ)
209224
}
210225
);
211226
};
212227

213-
let print_attr = ({Types.ld_id, ld_mutable, ld_type}) => {
214-
(
215-
switch (ld_mutable) {
216-
| Asttypes.Immutable => Pretty.empty
217-
| Mutable => str("mut ")
218-
}
219-
)
220-
@! ident(ld_id)
221-
@! str(": ")
222-
@! print_expr(ld_type);
223-
};
224-
225228
let print_decl = (realName, name, decl) => {
226229
Types.(
227230
str("type ")
228-
@! str(~len=String.length(realName), name)
229-
@! (
231+
+++ str(~len=String.length(realName), name)
232+
+++ (
230233
switch (decl.type_params) {
231234
| [] => Pretty.empty
232235
| args => typeConstr(args, print_expr)
233236
}
234237
)
235-
@! (
238+
+++ (
236239
switch (decl.type_kind) {
237240
| Type_abstract => Pretty.empty
238241
| Type_open => str(" = ..")
239242
| Type_record(labels, _representation) =>
240243
str(" = {")
241-
@! indentGroup(break @! commadList(print_attr, labels) @! dedent)
242-
@! str("}")
244+
+++ indentGroup(break +++ commadList(print_attr, labels) +++ dedent)
245+
+++ str("}")
243246
| Type_variant(constructors) =>
244247
str(" = ")
245-
@! indentGroup(
246-
break
247-
@! str("| ")
248-
@! sepdList(
249-
space @! str("| "),
250-
constructors,
251-
print_constructor(print_expr),
252-
),
253-
)
254-
@! break
248+
+++ indentGroup(
249+
break
250+
+++ str("| ")
251+
+++ sepdList(
252+
space +++ str("| "),
253+
constructors,
254+
print_constructor(print_expr),
255+
),
256+
)
257+
+++ break
255258
}
256259
)
257-
@! (
260+
+++ (
258261
switch (decl.type_manifest) {
259262
| None => Pretty.empty
260-
| Some(manifest) => str(" = ") @! print_expr(manifest)
263+
| Some(manifest) => str(" = ") +++ print_expr(manifest)
261264
}
262265
)
263266
);

0 commit comments

Comments
 (0)