(semantic-symref-derive-find-filepatterns): Return a list

* lisp/cedet/semantic/symref/grep.el
(semantic-symref-derive-find-filepatterns): Return a list.
(semantic-symref-perform-search): Quote the result here once and for all.
This commit is contained in:
Stefan Monnier 2016-01-02 13:03:42 -05:00
parent 0a7ad071ef
commit 8637f3d0fa

View file

@ -53,6 +53,8 @@ and those hits returned.")
See find -name man page for format.") See find -name man page for format.")
(defun semantic-symref-derive-find-filepatterns (&optional mode) (defun semantic-symref-derive-find-filepatterns (&optional mode)
;; FIXME: This should be moved to grep.el, where it could be used
;; for "C-u M-x grep" as well.
"Derive a list of file patterns for the current buffer. "Derive a list of file patterns for the current buffer.
Looks first in `semantic-symref-filepattern-alist'. If it is not Looks first in `semantic-symref-filepattern-alist'. If it is not
there, it then looks in `auto-mode-alist', and attempts to derive something there, it then looks in `auto-mode-alist', and attempts to derive something
@ -64,28 +66,20 @@ Optional argument MODE specifies the `major-mode' to test."
(when (not pat) (when (not pat)
;; No hit, try auto-mode-alist. ;; No hit, try auto-mode-alist.
(dolist (X auto-mode-alist) (dolist (X auto-mode-alist)
(when (eq (cdr X) mode) (when (and (eq (cdr X) mode)
;; Only take in simple patterns, so try to convert this one. ;; Only take in simple patterns, so try to convert this one.
(let ((Xp (string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X)))
(cond ((string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X)) (push (concat "*." (match-string 1 (car X))) pat))))
(concat "*." (match-string 1 (car X))))
(t nil))))
(when Xp
(setq pat (cons Xp pat))))
)))
;; Convert the list into some find-flags. ;; Convert the list into some find-flags.
(cond ((= (length pat) 1) (if (null pat)
(concat "-name " (shell-quote-argument (car pat)))) (error "Customize `semantic-symref-filepattern-alist' for %S"
((consp pat) major-mode)
(concat (shell-quote-argument "(") " " (let ((args `("-name" ,(car pat))))
(mapconcat (lambda (s) (if (null (cdr args))
(concat "-name " (shell-quote-argument s))) args
pat `("(" ,@args
" -o ") ,@(apply #'nconc (mapcar (lambda (s) `("-o" "-name" ,s)) pat))
" " (shell-quote-argument ")"))) ")"))))))
(t
(error "Customize `semantic-symref-filepattern-alist' for %s" major-mode))
)))
(defvar grepflags) (defvar grepflags)
(defvar greppattern) (defvar greppattern)
@ -147,7 +141,8 @@ This shell should support pipe redirect syntax."
;; Find the root of the project, and do a find-grep... ;; Find the root of the project, and do a find-grep...
(let* (;; Find the file patterns to use. (let* (;; Find the file patterns to use.
(rootdir (semantic-symref-calculate-rootdir)) (rootdir (semantic-symref-calculate-rootdir))
(filepattern (semantic-symref-derive-find-filepatterns)) (filepatterns (semantic-symref-derive-find-filepatterns))
(filepattern (mapconcat #'shell-quote-argument filepatterns " "))
;; Grep based flags. ;; Grep based flags.
(grepflags (cond ((eq (oref tool :resulttype) 'file) (grepflags (cond ((eq (oref tool :resulttype) 'file)
"-l ") "-l ")