nix_doc/
pprint.rs

1use rnix::types::{Lambda, TypedNode};
2use rnix::SyntaxKind::*;
3
4/// Pretty-prints the arguments to a function
5pub fn pprint_args(lambda: &Lambda) -> String {
6    // TODO: handle docs directly on NODE_IDENT args (uncommon case)
7    let mut lambda = lambda.clone();
8    let mut out = String::new();
9    loop {
10        let arg = lambda.arg().unwrap();
11        match arg.kind() {
12            NODE_IDENT => {
13                out.push_str(&arg.to_string());
14                out.push_str(": ");
15                let body = lambda.body().unwrap();
16                if body.kind() == NODE_LAMBDA {
17                    lambda = Lambda::cast(body).unwrap();
18                } else {
19                    break;
20                }
21            }
22            NODE_PATTERN => {
23                out.push_str(&arg.to_string());
24                out.push_str(": ");
25                break;
26            }
27            t => {
28                unreachable!("unhandled arg type {:?}", t);
29            }
30        }
31    }
32    out.push_str("...");
33    out
34
35    //pprint_arg(lambda.arg());
36}