From 7711db3a3af8f7ca156c8c71ae4b7ea2dd02d96f Mon Sep 17 00:00:00 2001
From: Daniel S Poulin <dan.poulin@digitalsurgeons.com>
Date: Tue, 16 Aug 2022 21:41:59 -0400
Subject: [PATCH] Adjust `m` textobject description and minor code
 clarification (#3343)

* Update description of `m` textobject to its actual functionality

Sometime recently the functionality of `m` was changed to match the
nearest pair to the cursor, rather than the former functionality of
matching the pair only if the cursor was on one of the brace characters
directly.

* Rename surround methods to reflect that they work on pairs

The current naming suggests that they may work generally on any
textobject, whereas their implementation really focuses on pairs.

* Change description of m textobject to match actual functionality

The current implementation of `m` no longer merely looks at the pair
character the cursor is on, but actually will search for the pair
(defined in helix-core/src/surround.rs) that encloses the cursor, and
not the entire selection.

* Accept suggested wording change

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* Prefix pair surround for consistency

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
---
 helix-core/src/textobject.rs | 12 ++++++------
 helix-term/src/commands.rs   |  8 +++++---
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/helix-core/src/textobject.rs b/helix-core/src/textobject.rs
index ee06bf47..76c6d103 100644
--- a/helix-core/src/textobject.rs
+++ b/helix-core/src/textobject.rs
@@ -198,26 +198,26 @@ pub fn textobject_paragraph(
     Range::new(anchor, head)
 }
 
-pub fn textobject_surround(
+pub fn textobject_pair_surround(
     slice: RopeSlice,
     range: Range,
     textobject: TextObject,
     ch: char,
     count: usize,
 ) -> Range {
-    textobject_surround_impl(slice, range, textobject, Some(ch), count)
+    textobject_pair_surround_impl(slice, range, textobject, Some(ch), count)
 }
 
-pub fn textobject_surround_closest(
+pub fn textobject_pair_surround_closest(
     slice: RopeSlice,
     range: Range,
     textobject: TextObject,
     count: usize,
 ) -> Range {
-    textobject_surround_impl(slice, range, textobject, None, count)
+    textobject_pair_surround_impl(slice, range, textobject, None, count)
 }
 
-fn textobject_surround_impl(
+fn textobject_pair_surround_impl(
     slice: RopeSlice,
     range: Range,
     textobject: TextObject,
@@ -562,7 +562,7 @@ mod test {
             let slice = doc.slice(..);
             for &case in scenario {
                 let (pos, objtype, expected_range, ch, count) = case;
-                let result = textobject_surround(slice, Range::point(pos), objtype, ch, count);
+                let result = textobject_pair_surround(slice, Range::point(pos), objtype, ch, count);
                 assert_eq!(
                     result,
                     expected_range.into(),
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index f1cc5966..ae50ed7c 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4332,10 +4332,12 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
                         'o' => textobject_treesitter("comment", range),
                         't' => textobject_treesitter("test", range),
                         'p' => textobject::textobject_paragraph(text, range, objtype, count),
-                        'm' => textobject::textobject_surround_closest(text, range, objtype, count),
+                        'm' => textobject::textobject_pair_surround_closest(
+                            text, range, objtype, count,
+                        ),
                         // TODO: cancel new ranges if inconsistent surround matches across lines
                         ch if !ch.is_ascii_alphanumeric() => {
-                            textobject::textobject_surround(text, range, objtype, ch, count)
+                            textobject::textobject_pair_surround(text, range, objtype, ch, count)
                         }
                         _ => range,
                     }
@@ -4361,7 +4363,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
             ("a", "Argument/parameter (tree-sitter)"),
             ("o", "Comment (tree-sitter)"),
             ("t", "Test (tree-sitter)"),
-            ("m", "Matching delimiter under cursor"),
+            ("m", "Closest surrounding pair to cursor"),
             (" ", "... or any character acting as a pair"),
         ];