summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author+merlan #flirora <flirora@flirora.xyz>2025-03-31 05:06:18 -0400
committerGitHub <noreply@github.com>2025-03-31 09:06:18 +0000
commita64af130dc84c84442d59f322b705bded28201de (patch)
tree5a27cc17b861cca3d0f06b9edf3de432701ada2a
parent1082181a6f789b73fbc64c4ff5bc1401ad081e76 (diff)
Add default parameter for array.{first, last} (#5970)
-rw-r--r--crates/typst-library/src/foundations/array.rs24
-rw-r--r--tests/suite/foundations/array.typ4
2 files changed, 22 insertions, 6 deletions
diff --git a/crates/typst-library/src/foundations/array.rs b/crates/typst-library/src/foundations/array.rs
index e81b9e64..b647473a 100644
--- a/crates/typst-library/src/foundations/array.rs
+++ b/crates/typst-library/src/foundations/array.rs
@@ -172,17 +172,29 @@ impl Array {
}
/// Returns the first item in the array. May be used on the left-hand side
- /// of an assignment. Fails with an error if the array is empty.
+ /// an assignment. Returns the default value if the array is empty
+ /// or fails with an error is no default value was specified.
#[func]
- pub fn first(&self) -> StrResult<Value> {
- self.0.first().cloned().ok_or_else(array_is_empty)
+ pub fn first(
+ &self,
+ /// A default value to return if the array is empty.
+ #[named]
+ default: Option<Value>,
+ ) -> StrResult<Value> {
+ self.0.first().cloned().or(default).ok_or_else(array_is_empty)
}
/// Returns the last item in the array. May be used on the left-hand side of
- /// an assignment. Fails with an error if the array is empty.
+ /// an assignment. Returns the default value if the array is empty
+ /// or fails with an error is no default value was specified.
#[func]
- pub fn last(&self) -> StrResult<Value> {
- self.0.last().cloned().ok_or_else(array_is_empty)
+ pub fn last(
+ &self,
+ /// A default value to return if the array is empty.
+ #[named]
+ default: Option<Value>,
+ ) -> StrResult<Value> {
+ self.0.last().cloned().or(default).ok_or_else(array_is_empty)
}
/// Returns the item at the specified index in the array. May be used on the
diff --git a/tests/suite/foundations/array.typ b/tests/suite/foundations/array.typ
index 6228f471..61b5decb 100644
--- a/tests/suite/foundations/array.typ
+++ b/tests/suite/foundations/array.typ
@@ -179,6 +179,10 @@
#test((2,).last(), 2)
#test((1, 2, 3).first(), 1)
#test((1, 2, 3).last(), 3)
+#test((1, 2).first(default: 99), 1)
+#test(().first(default: 99), 99)
+#test((1, 2).last(default: 99), 2)
+#test(().last(default: 99), 99)
--- array-first-empty ---
// Error: 2-12 array is empty