summaryrefslogtreecommitdiff
path: root/helix-stdx/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-stdx/src')
-rw-r--r--helix-stdx/src/lib.rs1
-rw-r--r--helix-stdx/src/rope.rs26
2 files changed, 27 insertions, 0 deletions
diff --git a/helix-stdx/src/lib.rs b/helix-stdx/src/lib.rs
index ae3c3a98..68fe3ec3 100644
--- a/helix-stdx/src/lib.rs
+++ b/helix-stdx/src/lib.rs
@@ -1,2 +1,3 @@
pub mod env;
pub mod path;
+pub mod rope;
diff --git a/helix-stdx/src/rope.rs b/helix-stdx/src/rope.rs
new file mode 100644
index 00000000..4ee39d4a
--- /dev/null
+++ b/helix-stdx/src/rope.rs
@@ -0,0 +1,26 @@
+use ropey::RopeSlice;
+
+pub trait RopeSliceExt: Sized {
+ fn ends_with(self, text: &str) -> bool;
+ fn starts_with(self, text: &str) -> bool;
+}
+
+impl RopeSliceExt for RopeSlice<'_> {
+ fn ends_with(self, text: &str) -> bool {
+ let len = self.len_bytes();
+ if len < text.len() {
+ return false;
+ }
+ self.get_byte_slice(len - text.len()..)
+ .map_or(false, |end| end == text)
+ }
+
+ fn starts_with(self, text: &str) -> bool {
+ let len = self.len_bytes();
+ if len < text.len() {
+ return false;
+ }
+ self.get_byte_slice(..len - text.len())
+ .map_or(false, |start| start == text)
+ }
+}