• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TyRoXx / NonlocalityOS / 15532271148

09 Jun 2025 10:19AM UTC coverage: 76.046% (+0.4%) from 75.667%
15532271148

Pull #289

github

web-flow
Merge 738a1765e into 1c6ef0cf3
Pull Request #289: GH-288: make code formatter good enough for the examples

92 of 96 new or added lines in 7 files covered. (95.83%)

4 existing lines in 2 files now uncovered.

3962 of 5210 relevant lines covered (76.05%)

2261.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.59
/lambda_compiler/src/format.rs
1
use crate::ast::{Expression, LambdaParameter};
2

3
fn format_string_literal<W>(content: &str, writer: &mut W) -> std::fmt::Result
27✔
4
where
5
    W: std::fmt::Write,
6
{
7
    write!(writer, "\"")?;
27✔
8
    for character in content.chars() {
99✔
9
        match character {
72✔
10
            '"' | '\'' | '\\' => write!(writer, "\\{character}")?,
3✔
11
            '\n' => write!(writer, "\\n")?,
1✔
12
            '\r' => write!(writer, "\\r")?,
1✔
13
            '\t' => write!(writer, "\\t")?,
1✔
14
            _ => write!(writer, "{character}")?,
66✔
15
        }
16
    }
17
    write!(writer, "\"")
27✔
18
}
19

20
fn format_apply<W>(
16✔
21
    callee: &Expression,
22
    arguments: &[Expression],
23
    indentation_level: usize,
24
    writer: &mut W,
25
) -> std::fmt::Result
26
where
27
    W: std::fmt::Write,
28
{
29
    format_expression(callee, indentation_level, writer)?;
16✔
30
    write!(writer, "(")?;
16✔
31
    for (index, argument) in arguments.iter().enumerate() {
43✔
32
        if index > 0 {
27✔
33
            write!(writer, ", ")?;
13✔
34
        }
35
        format_expression(argument, indentation_level, writer)?;
27✔
36
    }
37
    write!(writer, ")")
16✔
38
}
39

40
fn format_lambda<W>(
22✔
41
    parameters: &[LambdaParameter],
42
    body: &Expression,
43
    indentation_level: usize,
44
    writer: &mut W,
45
) -> std::fmt::Result
46
where
47
    W: std::fmt::Write,
48
{
49
    write!(writer, "(")?;
22✔
50
    for (index, parameter) in parameters.iter().enumerate() {
46✔
51
        if index > 0 {
24✔
52
            write!(writer, ", ")?;
11✔
53
        }
54
        write!(writer, "{}", parameter.name.key)?;
24✔
55
        if let Some(type_annotation) = &parameter.type_annotation {
43✔
56
            write!(writer, ": ")?;
×
57
            format_expression(type_annotation, indentation_level, writer)?;
19✔
58
        }
59
    }
60
    write!(writer, ") => ")?;
22✔
61
    format_expression(body, indentation_level, writer)
22✔
62
}
63

64
fn break_line<W>(indentation_level: usize, writer: &mut W) -> std::fmt::Result
63✔
65
where
66
    W: std::fmt::Write,
67
{
68
    writeln!(writer)?;
63✔
69
    for _ in 0..indentation_level {
63✔
70
        write!(writer, "    ")?;
42✔
71
    }
72
    Ok(())
63✔
73
}
74

75
pub fn format_braces<W>(
13✔
76
    content: &Expression,
77
    indentation_level: usize,
78
    writer: &mut W,
79
) -> std::fmt::Result
80
where
81
    W: std::fmt::Write,
82
{
83
    write!(writer, "{{")?;
13✔
84
    let mut content_formatted = String::new();
13✔
85
    format_expression(content, indentation_level, &mut content_formatted)?;
13✔
86
    if content_formatted.contains('\n') {
13✔
87
        let inner_indentation_level = indentation_level + 1;
8✔
88
        break_line(inner_indentation_level, writer)?;
8✔
89
        format_expression(content, inner_indentation_level, writer)?;
8✔
90
        break_line(indentation_level, writer)?;
8✔
91
    } else {
92
        write!(writer, "{content_formatted}")?;
5✔
93
    }
94
    write!(writer, "}}")
13✔
95
}
96

97
pub fn format_expression<W>(
253✔
98
    expression: &Expression,
99
    indentation_level: usize,
100
    writer: &mut W,
101
) -> std::fmt::Result
102
where
103
    W: std::fmt::Write,
104
{
105
    match expression {
253✔
106
        Expression::Identifier(name, _source_location) => write!(writer, "{}", &name.key),
103✔
107
        Expression::StringLiteral(content, _source_location) => {
27✔
108
            format_string_literal(content, writer)
27✔
109
        }
110
        Expression::Apply { callee, arguments } => {
16✔
111
            format_apply(callee, arguments, indentation_level, writer)
16✔
112
        }
113
        Expression::Lambda { parameters, body } => {
22✔
114
            format_lambda(parameters, body, indentation_level, writer)
22✔
115
        }
116
        Expression::ConstructTree(children) => {
14✔
117
            write!(writer, "[")?;
14✔
118
            for (index, child) in children.iter().enumerate() {
38✔
119
                if index > 0 {
24✔
120
                    write!(writer, ", ")?;
11✔
121
                }
122
                format_expression(child, indentation_level, writer)?;
24✔
123
            }
124
            write!(writer, "]")
14✔
125
        }
126
        Expression::Braces(content) => format_braces(content, indentation_level, writer),
13✔
UNCOV
127
        Expression::Let {
×
128
            name,
40✔
129
            location: _,
40✔
130
            value,
40✔
131
            body,
40✔
132
        } => {
40✔
133
            write!(writer, "let {} = ", &name.key)?;
40✔
134
            format_expression(value, indentation_level, writer)?;
40✔
135
            break_line(indentation_level, writer)?;
40✔
136
            format_expression(body, indentation_level, writer)
40✔
137
        }
138
        Expression::TypeOf(expression) => {
11✔
139
            write!(writer, "type_of(")?;
11✔
140
            format_expression(expression, indentation_level, writer)?;
11✔
141
            write!(writer, ")")
11✔
142
        }
143
        Expression::Comment(comment, expression, _source_location) => {
7✔
144
            write!(writer, "#{comment}")?;
7✔
145
            break_line(indentation_level, writer)?;
7✔
146
            format_expression(expression, indentation_level, writer)
7✔
147
        }
148
    }
149
}
150

151
pub fn format_file<W>(entry_point: &Expression, writer: &mut W) -> std::fmt::Result
5✔
152
where
153
    W: std::fmt::Write,
154
{
155
    format_expression(entry_point, 0, writer)?;
5✔
156
    writeln!(writer)
5✔
157
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc