From: Juri Linkov <juri@linkov.net>
To: 49836@debbugs.gnu.org
Subject: bug#49836: Support ripgrep in semantic-symref-tool-grep
Date: Tue, 03 Aug 2021 11:10:05 +0300 [thread overview]
Message-ID: <875ywn556i.fsf@mail.linkov.net> (raw)
In-Reply-To: <87sfzrbke1.fsf_-_@mail.linkov.net> (Juri Linkov's message of "Tue, 03 Aug 2021 00:05:02 +0300")
[-- Attachment #1: Type: text/plain, Size: 395 bytes --]
tags 49836 + patch
quit
> This means to turn the existing variable 'grep-program' into the user option
> as the following patch does.
>
> Also later grep.el could use the value "rg" of 'grep-program'
> to create the corresponding grep-find-template in grep-compute-defaults.
>
> But I don't know if it's ok to mention rigrep in grep.el?
So here is the complete support for rigrep in grep.el:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: grep-program-ripgrep.patch --]
[-- Type: text/x-diff, Size: 5196 bytes --]
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 7453dbed99..c4adee609c 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1544,7 +1544,7 @@ xref-search-program
"The program to use for regexp search inside files.
This must reference a corresponding entry in `xref-search-program-alist'."
- :type `(choice
+ :type '(choice
(const :tag "Use Grep" grep)
(const :tag "Use ripgrep" ripgrep)
(symbol :tag "User defined"))
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 8f0a5acf70..cc3375a284 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -484,9 +484,14 @@ grep-mode-font-lock-keywords
This gets tacked on the end of the generated expressions.")
;;;###autoload
-(defvar grep-program (purecopy "grep")
+(defcustom grep-program (purecopy "grep")
"The default grep program for `grep-command' and `grep-find-command'.
-This variable's value takes effect when `grep-compute-defaults' is called.")
+This variable's value takes effect when `grep-compute-defaults' is called."
+ :type '(choice
+ (const :tag "Use Grep" "grep")
+ (const :tag "Use ripgrep" "rg")
+ (string :tag "User defined"))
+ :version "28.1")
;;;###autoload
(defvar find-program (purecopy "find")
@@ -709,13 +714,14 @@ grep-compute-defaults
(let ((grep-options
(concat (if grep-use-null-device "-n" "-nH")
(if grep-use-null-filename-separator " --null")
+ (if (equal grep-program "rg") " --no-heading")
(when (grep-probe grep-program
`(nil nil nil "-e" "foo" ,(null-device))
nil 1)
" -e"))))
(unless grep-command
(setq grep-command
- (format "%s %s %s " grep-program
+ (format "%s%s %s " grep-program
(or
(and grep-highlight-matches
(grep-probe
@@ -723,7 +729,7 @@ grep-compute-defaults
`(nil nil nil "--color" "x" ,(null-device))
nil 1)
(if (eq grep-highlight-matches 'always)
- "--color=always" "--color=auto"))
+ " --color=always" " --color=auto"))
"")
grep-options)))
(unless grep-template
@@ -983,6 +989,8 @@ grep-expand-template
(push "--color=always" opts))
((eq grep-highlight-matches 'auto)
(push "--color=auto" opts)))
+ (when (equal grep-program "rg")
+ (push "--no-heading" opts))
opts))
(excl . ,excl)
(dir . ,dir)
@@ -1131,7 +1139,7 @@ lgrep
files
nil
(and grep-find-ignored-files
- (concat " --exclude="
+ (concat (if (equal grep-program "rg") " -g=!" " --exclude=")
(mapconcat
(lambda (ignore)
(cond ((stringp ignore)
@@ -1141,7 +1149,7 @@ lgrep
(shell-quote-argument
(cdr ignore))))))
grep-find-ignored-files
- " --exclude=")))
+ (if (equal grep-program "rg") " -g=!" " --exclude="))))
(and (eq grep-use-directories-skip t)
'("--directories=skip"))))
(when command
@@ -1339,7 +1347,8 @@ zrgrep
nil default-directory t))
(confirm (equal current-prefix-arg '(4))))
(list regexp files dir confirm grep-find-template)))))))
- (let ((grep-find-template template)
+ (let ((grep-program "zgrep")
+ (grep-find-template template)
;; Set `grep-highlight-matches' to `always'
;; since `zgrep' puts filters in the grep output.
(grep-highlight-matches 'always))
diff --git a/lisp/cedet/semantic/symref/grep.el b/lisp/cedet/semantic/symref/grep.el
index 180d779a78..034f797076 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -150,15 +150,14 @@ semantic-symref-perform-search
"-l ")
((eq (oref tool searchtype) 'regexp)
"-nE ")
- (t "-n ")))
+ (t (if (equal grep-program "rg") "" "-n "))))
(greppat (cond ((eq (oref tool searchtype) 'regexp)
(oref tool searchfor))
(t
;; Can't use the word boundaries: Grep
;; doesn't always agree with the language
;; syntax on those.
- (format "\\(^\\|\\W\\)%s\\(\\W\\|$\\)"
- (oref tool searchfor)))))
+ (format "\\b%s\\b" (oref tool searchfor)))))
;; Misc
(b (get-buffer-create "*Semantic SymRef*"))
(ans nil)
next prev parent reply other threads:[~2021-08-03 8:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-02 21:05 bug#49836: Support ripgrep in semantic-symref-tool-grep Juri Linkov
2021-08-03 8:10 ` Juri Linkov [this message]
2021-08-04 3:14 ` Dmitry Gutov
2021-08-04 21:23 ` Juri Linkov
2021-08-05 3:03 ` Dmitry Gutov
2021-08-06 0:35 ` Juri Linkov
2021-08-07 14:12 ` Dmitry Gutov
2021-09-18 13:53 ` Mattias Engdegård
2021-09-18 14:14 ` Eli Zaretskii
2021-09-18 14:18 ` Mattias Engdegård
2021-09-18 14:25 ` Eli Zaretskii
2021-09-18 21:48 ` Dmitry Gutov
2021-09-18 23:53 ` Dmitry Gutov
2021-09-19 0:21 ` Jim Porter
2021-09-19 10:11 ` Mattias Engdegård
2021-09-20 0:14 ` Dmitry Gutov
2021-09-20 5:09 ` Jim Porter
2021-09-20 17:04 ` Dmitry Gutov
-- strict thread matches above, loose matches on Subject: below --
2021-09-15 15:56 master 544db1e: Faster grep pattern for identifiers Eli Zaretskii
2021-09-15 16:25 ` Dmitry Gutov
2021-09-15 16:33 ` Eli Zaretskii
2021-09-15 18:06 ` Dmitry Gutov
2021-09-15 18:14 ` Eli Zaretskii
2021-09-15 18:39 ` Dmitry Gutov
2021-09-17 16:07 ` bug#49836: Support ripgrep in semantic-symref-tool-grep Juri Linkov
2021-09-17 16:24 ` Lars Ingebrigtsen
2021-09-18 18:37 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=875ywn556i.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=49836@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.