aboutsummaryrefslogtreecommitdiff
path: root/lix-doc/src/pprint.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lix-doc/src/pprint.rs')
-rw-r--r--lix-doc/src/pprint.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/lix-doc/src/pprint.rs b/lix-doc/src/pprint.rs
new file mode 100644
index 000000000..7e73d2d20
--- /dev/null
+++ b/lix-doc/src/pprint.rs
@@ -0,0 +1,40 @@
+// SPDX-FileCopyrightText: 2024 Jade Lovelace
+//
+// SPDX-License-Identifier: BSD-2-Clause OR MIT
+
+use rnix::types::{Lambda, TypedNode};
+use rnix::SyntaxKind::*;
+
+/// Pretty-prints the arguments to a function
+pub fn pprint_args(lambda: &Lambda) -> String {
+ // TODO: handle docs directly on NODE_IDENT args (uncommon case)
+ let mut lambda = lambda.clone();
+ let mut out = String::new();
+ loop {
+ let arg = lambda.arg().unwrap();
+ match arg.kind() {
+ NODE_IDENT => {
+ out += &format!("*{}*", &arg.to_string());
+ out.push_str(": ");
+ let body = lambda.body().unwrap();
+ if body.kind() == NODE_LAMBDA {
+ lambda = Lambda::cast(body).unwrap();
+ } else {
+ break;
+ }
+ }
+ NODE_PATTERN => {
+ out += &format!("*{}*", &arg.to_string());
+ out.push_str(": ");
+ break;
+ }
+ t => {
+ unreachable!("unhandled arg type {:?}", t);
+ }
+ }
+ }
+ out.push_str("...");
+ out
+
+ //pprint_arg(lambda.arg());
+}