Skip to content

Commit 30f8348

Browse files
committed
Differentiate consistency of commasep boxes
1 parent 21313d6 commit 30f8348

File tree

2 files changed

+35
-27
lines changed

2 files changed

+35
-27
lines changed

src/comp/pretty/pp.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -505,14 +505,18 @@ obj printer(io::writer out,
505505

506506
// Convenience functions to talk to the printer.
507507

508-
fn ibox(printer p, uint indent) {
508+
fn box(printer p, uint indent, breaks b) {
509509
p.pretty_print(BEGIN(rec(offset = indent as int,
510-
breaks = inconsistent)));
510+
breaks = b)));
511+
}
512+
513+
514+
fn ibox(printer p, uint indent) {
515+
box(p, indent, inconsistent);
511516
}
512517

513518
fn cbox(printer p, uint indent) {
514-
p.pretty_print(BEGIN(rec(offset = indent as int,
515-
breaks = consistent)));
519+
box(p, indent, consistent);
516520
}
517521

518522

src/comp/pretty/pprust.rs

+27-23
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@ import pp;
1111

1212
import pp::printer;
1313
import pp::break_offset;
14+
import pp::box;
1415
import pp::cbox;
1516
import pp::ibox;
1617
import pp::wrd;
1718
import pp::space;
1819
import pp::hardbreak;
20+
import pp::breaks;
21+
import pp::consistent;
22+
import pp::inconsistent;
1923
import pp::end;
2024
import pp::eof;
2125

@@ -117,8 +121,8 @@ fn bclose(ps s, common::span span) {
117121
end(s.s); // close the outer-box
118122
}
119123

120-
fn commasep[IN](ps s, vec[IN] elts, fn(ps, &IN) op) {
121-
ibox(s.s, 0u);
124+
fn commasep[IN](ps s, breaks b, vec[IN] elts, fn(ps, &IN) op) {
125+
box(s.s, 0u, b);
122126
auto first = true;
123127
for (IN elt in elts) {
124128
if (first) {first = false;}
@@ -128,9 +132,9 @@ fn commasep[IN](ps s, vec[IN] elts, fn(ps, &IN) op) {
128132
end(s.s);
129133
}
130134

131-
fn commasep_cmnt[IN](ps s, vec[IN] elts, fn(ps, &IN) op,
135+
fn commasep_cmnt[IN](ps s, breaks b, vec[IN] elts, fn(ps, &IN) op,
132136
fn(&IN) -> common::span get_span) {
133-
ibox(s.s, 0u);
137+
box(s.s, 0u, b);
134138
auto len = vec::len[IN](elts);
135139
auto i = 0u;
136140
for (IN elt in elts) {
@@ -144,11 +148,11 @@ fn commasep_cmnt[IN](ps s, vec[IN] elts, fn(ps, &IN) op,
144148
end(s.s);
145149
}
146150

147-
fn commasep_exprs(ps s, vec[@ast::expr] exprs) {
151+
fn commasep_exprs(ps s, breaks b, vec[@ast::expr] exprs) {
148152
fn expr_span(&@ast::expr expr) -> common::span {ret expr.span;}
149153
auto f = print_expr;
150154
auto gs = expr_span;
151-
commasep_cmnt[@ast::expr](s, exprs, f, gs);
155+
commasep_cmnt[@ast::expr](s, b, exprs, f, gs);
152156
}
153157

154158
fn print_mod(ps s, ast::_mod _mod) {
@@ -192,7 +196,7 @@ fn print_type(ps s, &@ast::ty ty) {
192196
wrd(s.s, "tup");
193197
popen(s);
194198
auto f = print_mt;
195-
commasep[ast::mt](s, elts, f);
199+
commasep[ast::mt](s, inconsistent, elts, f);
196200
pclose(s);
197201
}
198202
case (ast::ty_rec(?fields)) {
@@ -213,7 +217,7 @@ fn print_type(ps s, &@ast::ty ty) {
213217
}
214218
auto f = print_field;
215219
auto gs = get_span;
216-
commasep_cmnt[ast::ty_field](s, fields, f, gs);
220+
commasep_cmnt[ast::ty_field](s, consistent, fields, f, gs);
217221
pclose(s);
218222
}
219223
case (ast::ty_obj(?methods)) {
@@ -332,7 +336,7 @@ fn print_item(ps s, @ast::item item) {
332336
print_type(s, arg.ty);
333337
}
334338
auto f = print_variant_arg;
335-
commasep[ast::variant_arg](s, v.node.args, f);
339+
commasep[ast::variant_arg](s, consistent, v.node.args, f);
336340
pclose(s);
337341
}
338342
wrd(s.s, ";");
@@ -355,7 +359,7 @@ fn print_item(ps s, @ast::item item) {
355359
fn get_span(&ast::obj_field f) -> common::span {ret f.ty.span;}
356360
auto f = print_field;
357361
auto gs = get_span;
358-
commasep_cmnt[ast::obj_field](s, _obj.fields, f, gs);
362+
commasep_cmnt[ast::obj_field](s, consistent, _obj.fields, f, gs);
359363
pclose(s);
360364
space(s.s);
361365
bopen(s);
@@ -457,7 +461,7 @@ fn print_expr(ps s, &@ast::expr expr) {
457461
}
458462
ibox(s.s, indent_unit);
459463
wrd(s.s, "[");
460-
commasep_exprs(s, exprs);
464+
commasep_exprs(s, inconsistent, exprs);
461465
wrd(s.s, "]");
462466
end(s.s);
463467
}
@@ -473,7 +477,7 @@ fn print_expr(ps s, &@ast::expr expr) {
473477
popen(s);
474478
auto f = printElt;
475479
auto gs = get_span;
476-
commasep_cmnt[ast::elt](s, exprs, f, gs);
480+
commasep_cmnt[ast::elt](s, inconsistent, exprs, f, gs);
477481
pclose(s);
478482
}
479483
case (ast::expr_rec(?fields,?wth,_)) {
@@ -492,7 +496,7 @@ fn print_expr(ps s, &@ast::expr expr) {
492496
popen(s);
493497
auto f = print_field;
494498
auto gs = get_span;
495-
commasep_cmnt[ast::field](s, fields, f, gs);
499+
commasep_cmnt[ast::field](s, consistent, fields, f, gs);
496500
alt (wth) {
497501
case (option::some[@ast::expr](?expr)) {
498502
if (vec::len[ast::field](fields) > 0u) {space(s.s);}
@@ -508,7 +512,7 @@ fn print_expr(ps s, &@ast::expr expr) {
508512
case (ast::expr_call(?func,?args,_)) {
509513
print_expr(s, func);
510514
popen(s);
511-
commasep_exprs(s, args);
515+
commasep_exprs(s, inconsistent, args);
512516
pclose(s);
513517
}
514518
case (ast::expr_self_method(?ident,_)) {
@@ -528,14 +532,14 @@ fn print_expr(ps s, &@ast::expr expr) {
528532
print_expr(s, func);
529533
popen(s);
530534
auto f = print_opt;
531-
commasep[option::t[@ast::expr]](s, args, f);
535+
commasep[option::t[@ast::expr]](s, inconsistent, args, f);
532536
pclose(s);
533537
}
534538
case (ast::expr_spawn(_,_,?e,?es,_)) {
535539
word_nbsp(s, "spawn");
536540
print_expr(s, e);
537541
popen(s);
538-
commasep_exprs(s, es);
542+
commasep_exprs(s, inconsistent, es);
539543
pclose(s);
540544
}
541545
case (ast::expr_binary(?op,?lhs,?rhs,_)) {
@@ -742,7 +746,7 @@ fn print_expr(ps s, &@ast::expr expr) {
742746
print_path(s, path);
743747
if (vec::len[@ast::expr](args) > 0u) {
744748
popen(s);
745-
commasep_exprs(s, args);
749+
commasep_exprs(s, inconsistent, args);
746750
pclose(s);
747751
}
748752
// FIXME: extension 'body'
@@ -855,7 +859,7 @@ fn print_path(ps s, ast::path path) {
855859
if (vec::len[@ast::ty](path.node.types) > 0u) {
856860
wrd(s.s, "[");
857861
auto f = print_type;
858-
commasep[@ast::ty](s, path.node.types, f);
862+
commasep[@ast::ty](s, inconsistent, path.node.types, f);
859863
wrd(s.s, "]");
860864
}
861865
}
@@ -871,7 +875,7 @@ fn print_pat(ps s, &@ast::pat pat) {
871875
if (vec::len[@ast::pat](args) > 0u) {
872876
popen(s);
873877
auto f = print_pat;
874-
commasep[@ast::pat](s, args, f);
878+
commasep[@ast::pat](s, inconsistent, args, f);
875879
pclose(s);
876880
}
877881
}
@@ -900,7 +904,7 @@ fn print_fn(ps s, ast::fn_decl decl, str name,
900904
end(s.s);
901905
}
902906
auto f = print_arg;
903-
commasep[ast::arg](s, decl.inputs, f);
907+
commasep[ast::arg](s, inconsistent, decl.inputs, f);
904908
pclose(s);
905909
maybe_print_comment(s, decl.output.span.lo);
906910
if (decl.output.node != ast::ty_nil) {
@@ -917,7 +921,7 @@ fn print_type_params(ps s, vec[ast::ty_param] params) {
917921
wrd(s.s, param);
918922
}
919923
auto f = printParam;
920-
commasep[ast::ty_param](s, params, f);
924+
commasep[ast::ty_param](s, inconsistent, params, f);
921925
wrd(s.s, "]");
922926
}
923927
}
@@ -939,7 +943,7 @@ fn print_view_item(ps s, @ast::view_item item) {
939943
end(s.s);
940944
}
941945
auto f = print_meta;
942-
commasep[@ast::meta_item](s, mta, f);
946+
commasep[@ast::meta_item](s, consistent, mta, f);
943947
pclose(s);
944948
}
945949
}
@@ -1042,7 +1046,7 @@ fn print_ty_fn(ps s, ast::proto proto, option::t[str] id,
10421046
print_type(s, input.ty);
10431047
}
10441048
auto f = print_arg;
1045-
commasep[ast::ty_arg](s, inputs, f);
1049+
commasep[ast::ty_arg](s, inconsistent, inputs, f);
10461050
pclose(s);
10471051
maybe_print_comment(s, output.span.lo);
10481052
if (output.node != ast::ty_nil) {

0 commit comments

Comments
 (0)