Skip to content

Commit f9e1f5d

Browse files
committed
Don't depend on Debug impls in tests
Free lunch is over, Debug representation for str has changed (rust-lang/rust#83079). Roll our own version based on the stable `escape_debug()` method instead. Also spell out all the enums while at it.
1 parent a0304d3 commit f9e1f5d

File tree

1 file changed

+126
-23
lines changed

1 file changed

+126
-23
lines changed

src/print.rs

Lines changed: 126 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,23 @@ impl<'a> Printer<'a> {
4343
write!(&mut self.w, "{2:1$}{0}", name, self.offset * 4, "").unwrap();
4444
}
4545

46-
fn write_field(&mut self, f: &fmt::Debug) {
47-
write!(&mut self.w, " {:?}", f).unwrap();
46+
fn field<T: fmt::Display>(&mut self, s: T) {
47+
write!(&mut self.w, " {}", s).unwrap();
48+
}
49+
50+
fn field_str(&mut self, s: &str) {
51+
self.field_str_ext(" ", s);
52+
}
53+
54+
fn field_str_ext(&mut self, prefix: &str, str: &str) {
55+
write!(&mut self.w, "{}\"{}\"", prefix, str.escape_debug()).unwrap();
4856
}
4957
}
5058

5159
impl<'ast, 'a> Visit<'ast> for Printer<'a> {
5260
fn visit_identifier(&mut self, n: &'ast Identifier, span: &'ast Span) {
5361
self.name("Identifier");
54-
self.write_field(&n.name);
62+
self.field_str(&n.name);
5563
visit_identifier(&mut self.block(), n, span);
5664
}
5765
fn visit_constant(&mut self, n: &'ast Constant, span: &'ast Span) {
@@ -60,38 +68,50 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
6068
}
6169
fn visit_integer(&mut self, n: &'ast Integer, span: &'ast Span) {
6270
self.name("Integer");
63-
self.write_field(&n.number);
71+
self.field_str(&n.number);
6472
visit_integer(&mut self.block(), n, span);
6573
}
6674
fn visit_integer_base(&mut self, n: &'ast IntegerBase, span: &'ast Span) {
6775
self.name("IntegerBase");
68-
self.write_field(&n);
76+
self.field(match n {
77+
IntegerBase::Decimal => "Decimal",
78+
IntegerBase::Octal => "Octal",
79+
IntegerBase::Hexadecimal => "Hexadecimal",
80+
IntegerBase::Binary => "Binary",
81+
});
6982
visit_integer_base(&mut self.block(), n, span);
7083
}
7184
fn visit_integer_suffix(&mut self, n: &'ast IntegerSuffix, span: &'ast Span) {
7285
self.name("IntegerSuffix");
73-
self.write_field(&n.unsigned);
74-
self.write_field(&n.imaginary);
86+
self.field(n.unsigned);
87+
self.field(n.imaginary);
7588
visit_integer_suffix(&mut self.block(), n, span);
7689
}
7790
fn visit_integer_size(&mut self, n: &'ast IntegerSize, span: &'ast Span) {
7891
self.name("IntegerSize");
79-
self.write_field(&n);
92+
self.field(match n {
93+
IntegerSize::Int => "Int",
94+
IntegerSize::Long => "Long",
95+
IntegerSize::LongLong => "LongLong",
96+
});
8097
visit_integer_size(&mut self.block(), n, span);
8198
}
8299
fn visit_float(&mut self, n: &'ast Float, span: &'ast Span) {
83100
self.name("Float");
84-
self.write_field(&n.number);
101+
self.field_str(&n.number);
85102
visit_float(&mut self.block(), n, span);
86103
}
87104
fn visit_float_base(&mut self, n: &'ast FloatBase, span: &'ast Span) {
88105
self.name("FloatBase");
89-
self.write_field(&n);
106+
self.field(match n {
107+
FloatBase::Decimal => "Decimal",
108+
FloatBase::Hexadecimal => "Hexadecimal",
109+
});
90110
visit_float_base(&mut self.block(), n, span);
91111
}
92112
fn visit_float_suffix(&mut self, n: &'ast FloatSuffix, span: &'ast Span) {
93113
self.name("FloatSuffix");
94-
self.write_field(&n.imaginary);
114+
self.field(n.imaginary);
95115
visit_float_suffix(&mut self.block(), n, span);
96116
}
97117
fn visit_float_format(&mut self, n: &'ast FloatFormat, span: &'ast Span) {
@@ -101,7 +121,15 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
101121
}
102122
fn visit_string_literal(&mut self, n: &'ast StringLiteral, span: &'ast Span) {
103123
self.name("StringLiteral");
104-
self.write_field(&n);
124+
125+
self.w.write_str(" [").unwrap();
126+
let mut comma = false;
127+
for p in n {
128+
self.field_str_ext(if comma { ", " } else { "" }, p);
129+
comma = true;
130+
}
131+
self.w.write_str("]").unwrap();
132+
105133
visit_string_literal(&mut self.block(), n, span);
106134
}
107135
fn visit_expression(&mut self, n: &'ast Expression, span: &'ast Span) {
@@ -110,7 +138,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
110138
}
111139
fn visit_member_operator(&mut self, n: &'ast MemberOperator, span: &'ast Span) {
112140
self.name("MemberOperator");
113-
self.write_field(&n);
141+
self.field(match n {
142+
MemberOperator::Direct => "Direct",
143+
MemberOperator::Indirect => "Indirect",
144+
});
114145
visit_member_operator(&mut self.block(), n, span);
115146
}
116147
fn visit_generic_selection(&mut self, n: &'ast GenericSelection, span: &'ast Span) {
@@ -143,7 +174,19 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
143174
}
144175
fn visit_unary_operator(&mut self, n: &'ast UnaryOperator, span: &'ast Span) {
145176
self.name("UnaryOperator");
146-
self.write_field(&n);
177+
self.field(match n {
178+
UnaryOperator::PostIncrement => "PostIncrement",
179+
UnaryOperator::PostDecrement => "PostDecrement",
180+
UnaryOperator::PreIncrement => "PreIncrement",
181+
UnaryOperator::PreDecrement => "PreDecrement",
182+
UnaryOperator::Address => "Address",
183+
UnaryOperator::Indirection => "Indirection",
184+
UnaryOperator::Plus => "Plus",
185+
UnaryOperator::Minus => "Minus",
186+
UnaryOperator::Complement => "Complement",
187+
UnaryOperator::Negate => "Negate",
188+
UnaryOperator::SizeOf => "SizeOf",
189+
});
147190
visit_unary_operator(&mut self.block(), n, span);
148191
}
149192
fn visit_unary_operator_expression(
@@ -160,7 +203,38 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
160203
}
161204
fn visit_binary_operator(&mut self, n: &'ast BinaryOperator, span: &'ast Span) {
162205
self.name("BinaryOperator");
163-
self.write_field(&n);
206+
self.field(match n {
207+
BinaryOperator::Index => "Index",
208+
BinaryOperator::Multiply => "Multiply",
209+
BinaryOperator::Divide => "Divide",
210+
BinaryOperator::Modulo => "Modulo",
211+
BinaryOperator::Plus => "Plus",
212+
BinaryOperator::Minus => "Minus",
213+
BinaryOperator::ShiftLeft => "ShiftLeft",
214+
BinaryOperator::ShiftRight => "ShiftRight",
215+
BinaryOperator::Less => "Less",
216+
BinaryOperator::Greater => "Greater",
217+
BinaryOperator::LessOrEqual => "LessOrEqual",
218+
BinaryOperator::GreaterOrEqual => "GreaterOrEqual",
219+
BinaryOperator::Equals => "Equals",
220+
BinaryOperator::NotEquals => "NotEquals",
221+
BinaryOperator::BitwiseAnd => "BitwiseAnd",
222+
BinaryOperator::BitwiseXor => "BitwiseXor",
223+
BinaryOperator::BitwiseOr => "BitwiseOr",
224+
BinaryOperator::LogicalAnd => "LogicalAnd",
225+
BinaryOperator::LogicalOr => "LogicalOr",
226+
BinaryOperator::Assign => "Assign",
227+
BinaryOperator::AssignMultiply => "AssignMultiply",
228+
BinaryOperator::AssignDivide => "AssignDivide",
229+
BinaryOperator::AssignModulo => "AssignModulo",
230+
BinaryOperator::AssignPlus => "AssignPlus",
231+
BinaryOperator::AssignMinus => "AssignMinus",
232+
BinaryOperator::AssignShiftLeft => "AssignShiftLeft",
233+
BinaryOperator::AssignShiftRight => "AssignShiftRight",
234+
BinaryOperator::AssignBitwiseAnd => "AssignBitwiseAnd",
235+
BinaryOperator::AssignBitwiseXor => "AssignBitwiseXor",
236+
BinaryOperator::AssignBitwiseOr => "AssignBitwiseOr",
237+
});
164238
visit_binary_operator(&mut self.block(), n, span);
165239
}
166240
fn visit_binary_operator_expression(
@@ -206,7 +280,14 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
206280
}
207281
fn visit_storage_class_specifier(&mut self, n: &'ast StorageClassSpecifier, span: &'ast Span) {
208282
self.name("StorageClassSpecifier");
209-
self.write_field(&n);
283+
self.field(match n {
284+
StorageClassSpecifier::Typedef => "Typedef",
285+
StorageClassSpecifier::Extern => "Extern",
286+
StorageClassSpecifier::Static => "Static",
287+
StorageClassSpecifier::ThreadLocal => "ThreadLocal",
288+
StorageClassSpecifier::Auto => "Auto",
289+
StorageClassSpecifier::Register => "Register",
290+
});
210291
visit_storage_class_specifier(&mut self.block(), n, span);
211292
}
212293
fn visit_type_specifier(&mut self, n: &'ast TypeSpecifier, span: &'ast Span) {
@@ -216,12 +297,17 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
216297
}
217298
fn visit_ts18661_float_type(&mut self, n: &'ast TS18661FloatType, span: &'ast Span) {
218299
self.name("TS18661FloatType");
219-
self.write_field(&n.width);
300+
self.field(n.width);
220301
visit_ts18661_float_type(&mut self.block(), n, span);
221302
}
222303
fn visit_ts18661_float_format(&mut self, n: &'ast TS18661FloatFormat, span: &'ast Span) {
223304
self.name("TS18661FloatFormat");
224-
self.write_field(&n);
305+
self.field(match n {
306+
TS18661FloatFormat::BinaryInterchange => "BinaryInterchange",
307+
TS18661FloatFormat::BinaryExtended => "BinaryExtended",
308+
TS18661FloatFormat::DecimalInterchange => "DecimalInterchange",
309+
TS18661FloatFormat::DecimalExtended => "DecimalExtended",
310+
});
225311
visit_ts18661_float_format(&mut self.block(), n, span);
226312
}
227313
fn visit_struct_type(&mut self, n: &'ast StructType, span: &'ast Span) {
@@ -230,7 +316,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
230316
}
231317
fn visit_struct_kind(&mut self, n: &'ast StructKind, span: &'ast Span) {
232318
self.name("StructKind");
233-
self.write_field(&n);
319+
self.field(match n {
320+
StructKind::Struct => "Struct",
321+
StructKind::Union => "Union",
322+
});
234323
visit_struct_kind(&mut self.block(), n, span);
235324
}
236325
fn visit_struct_declaration(&mut self, n: &'ast StructDeclaration, span: &'ast Span) {
@@ -259,12 +348,23 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
259348
}
260349
fn visit_type_qualifier(&mut self, n: &'ast TypeQualifier, span: &'ast Span) {
261350
self.name("TypeQualifier");
262-
self.write_field(&n);
351+
self.field(match n {
352+
TypeQualifier::Const => "Const",
353+
TypeQualifier::Restrict => "Restrict",
354+
TypeQualifier::Volatile => "Volatile",
355+
TypeQualifier::Nonnull => "Nonnull",
356+
TypeQualifier::NullUnspecified => "NullUnspecified",
357+
TypeQualifier::Nullable => "Nullable",
358+
TypeQualifier::Atomic => "Atomic",
359+
});
263360
visit_type_qualifier(&mut self.block(), n, span);
264361
}
265362
fn visit_function_specifier(&mut self, n: &'ast FunctionSpecifier, span: &'ast Span) {
266363
self.name("FunctionSpecifier");
267-
self.write_field(&n);
364+
self.field(match n {
365+
FunctionSpecifier::Inline => "Inline",
366+
FunctionSpecifier::Noreturn => "Noreturn",
367+
});
268368
visit_function_specifier(&mut self.block(), n, span);
269369
}
270370
fn visit_alignment_specifier(&mut self, n: &'ast AlignmentSpecifier, span: &'ast Span) {
@@ -307,7 +407,10 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
307407
}
308408
fn visit_ellipsis(&mut self, n: &'ast Ellipsis, span: &'ast Span) {
309409
self.name("Ellipsis");
310-
self.write_field(&n);
410+
self.field(match n {
411+
Ellipsis::Some => "Some",
412+
Ellipsis::None => "None",
413+
});
311414
visit_ellipsis(&mut self.block(), n, span);
312415
}
313416
fn visit_type_name(&mut self, n: &'ast TypeName, span: &'ast Span) {
@@ -391,7 +494,7 @@ impl<'ast, 'a> Visit<'ast> for Printer<'a> {
391494
}
392495
fn visit_attribute(&mut self, n: &'ast Attribute, span: &'ast Span) {
393496
self.name("Attribute");
394-
self.write_field(&n.name.node);
497+
self.field_str(&n.name.node);
395498
visit_attribute(&mut self.block(), n, span);
396499
}
397500
fn visit_asm_statement(&mut self, n: &'ast AsmStatement, span: &'ast Span) {

0 commit comments

Comments
 (0)