doku/printers/json/print_array/
comment.rs1use super::*;
2
3impl Ctxt<'_, '_, '_> {
4 pub(super) fn comment_array(&mut self, size: Option<usize>) {
5 if !self.fmt.auto_comments.array_size {
6 return;
7 }
8
9 let size = if let Some(size) = size {
10 size
11 } else {
12 return;
13 };
14
15 self.out.append_comment(|comment| {
16 if comment.is_empty() {
17 swrite!(comment, "Must");
18 } else {
19 swrite!(comment, "; must");
20 }
21
22 swrite!(
23 comment,
24 " contain exactly {} element{}",
25 size,
26 if size == 1 { "" } else { "s" }
27 );
28 });
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 fn target<T: Document>(array_size: bool) -> String {
37 let fmt = Formatting {
38 auto_comments: AutoComments {
39 array_size,
40 ..Default::default()
41 },
42 ..Default::default()
43 };
44
45 Printer::default().with_formatting(&fmt).print(&T::ty())
46 }
47
48 mod when_hint {
49 use super::*;
50
51 mod is_disabled {
52 use super::*;
53
54 #[test]
55 fn then_doesnt_print_hint() {
56 assert_doc!(
57 r#"
58 [
59 123,
60 /* ... */
61 ]
62 "#,
63 target::<[usize; 0]>(false)
64 );
65 }
66 }
67
68 mod is_enabled {
69 use super::*;
70
71 #[test]
72 fn then_prints_hint() {
73 assert_doc!(
74 r#"
75 // Must contain exactly 0 elements
76 [
77 123,
78 /* ... */
79 ]
80 "#,
81 target::<[usize; 0]>(true)
82 );
83
84 assert_doc!(
85 r#"
86 // Must contain exactly 1 element
87 [
88 123,
89 /* ... */
90 ]
91 "#,
92 target::<[usize; 1]>(true)
93 );
94
95 assert_doc!(
96 r#"
97 // Must contain exactly 128 elements
98 [
99 123,
100 /* ... */
101 ]
102 "#,
103 target::<[usize; 128]>(true)
104 );
105 }
106 }
107 }
108}