branch: externals/ivy
commit 2c3f20a4dcdde0942dd6901c503936a74246f546
Author: Basil L. Contovounesios <ba...@contovou.net>
Commit: Basil L. Contovounesios <ba...@contovou.net>

    Minor counsel-git-grep cleanup
    
    * counsel.el (counsel-git-grep-function): Simplify.
    (counsel--git-grep-file-and-line-number): Rename...
    (counsel--git-grep-file-and-line): ...to this, splitting long lines.
    (counsel--git-grep-go-to-location): Rename...
    (counsel--git-grep-visit): ...to this, incorporating more DRY.
    (counsel-git-grep-action, counsel-git-grep-action-other-window):
    Adapt accordingly (#3044).
---
 counsel.el | 65 +++++++++++++++++++++++++++++---------------------------------
 1 file changed, 30 insertions(+), 35 deletions(-)

diff --git a/counsel.el b/counsel.el
index 7d33ff7438..a695bb9eaa 100644
--- a/counsel.el
+++ b/counsel.el
@@ -1429,49 +1429,44 @@ This function should set `ivy--old-re'."
   "Grep in the current Git repository for STRING."
   (or
    (ivy-more-chars)
-   (progn
-     (counsel--async-command
-      (concat
-       (funcall counsel-git-grep-cmd-function string)
-       (if (ivy--case-fold-p string) " -i" "")))
-     nil)))
+   (ignore
+    (counsel--async-command
+     (concat
+      (funcall counsel-git-grep-cmd-function string)
+      (and (ivy--case-fold-p string) " -i"))))))
 
 (defun counsel-git-grep-action (x)
   "Go to occurrence X in current Git repository."
-  (let ((file-and-line-number (counsel--git-grep-file-and-line-number x)))
-    (when file-and-line-number
-      (find-file (expand-file-name
-                  (car file-and-line-number)
-                  (ivy-state-directory ivy-last)))
-      (counsel--git-grep-go-to-location (cdr file-and-line-number)))))
+  (counsel--git-grep-visit x))
 
 (defun counsel-git-grep-action-other-window (x)
   "Go to occurrence X in current Git repository in another window."
-  (let ((file-and-line-number (counsel--git-grep-file-and-line-number x)))
-    (when file-and-line-number
-      (find-file-other-window (expand-file-name
-                               (car file-and-line-number)
-                               (ivy-state-directory ivy-last)))
-      (counsel--git-grep-go-to-location (cdr file-and-line-number)))))
-
-(defun counsel--git-grep-file-and-line-number (x)
+  (counsel--git-grep-visit x t))
+
+(defun counsel--git-grep-file-and-line (x)
   "Extract file name and line number from `counsel-git-grep' line X.
 Return a pair (FILE . LINE) on success; nil otherwise."
-  (when (string-match "\\`\\(.*?\\):\\([0-9]+\\):\\(.*\\)\\'" x)
-    (cons (match-string-no-properties 1 x) (string-to-number 
(match-string-no-properties 2 x)))))
-
-(defun counsel--git-grep-go-to-location (line-number)
-  "Go to LINE-NUMBER within current buffer."
-  (goto-char (point-min))
-  (forward-line (1- line-number))
-  (when (re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
-    (when swiper-goto-start-of-match
-      (goto-char (match-beginning 0))))
-  (swiper--ensure-visible)
-  (run-hooks 'counsel-grep-post-action-hook)
-  (unless (eq ivy-exit 'done)
-    (swiper--cleanup)
-    (swiper--add-overlays (ivy--regex ivy-text))))
+  (and (string-match "\\`\\(.*?\\):\\([0-9]+\\):\\(.*\\)\\'" x)
+       (cons (match-string-no-properties 1 x)
+             (string-to-number (match-string-no-properties 2 x)))))
+
+(defun counsel--git-grep-visit (cand &optional other-window)
+  "Visit `counsel-git-grep' CAND, optionally in OTHER-WINDOW."
+  (let ((file-and-line (counsel--git-grep-file-and-line cand)))
+    (when file-and-line
+      (funcall (if other-window #'find-file-other-window #'find-file)
+               (expand-file-name (car file-and-line)
+                                 (ivy-state-directory ivy-last)))
+      (goto-char (point-min))
+      (forward-line (1- (cdr file-and-line)))
+      (when (re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
+        (when swiper-goto-start-of-match
+          (goto-char (match-beginning 0))))
+      (swiper--ensure-visible)
+      (run-hooks 'counsel-grep-post-action-hook)
+      (unless (eq ivy-exit 'done)
+        (swiper--cleanup)
+        (swiper--add-overlays (ivy--regex ivy-text))))))
 
 (ivy-set-actions
  'counsel-git-grep

Reply via email to