(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.")
(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.
Looks first in `semantic-symref-filepattern-alist'. If it is not
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)
;; No hit, try 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.
(let ((Xp
(cond ((string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X))
(concat "*." (match-string 1 (car X))))
(t nil))))
(when Xp
(setq pat (cons Xp pat))))
)))
(string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X)))
(push (concat "*." (match-string 1 (car X))) pat))))
;; Convert the list into some find-flags.
(cond ((= (length pat) 1)
(concat "-name " (shell-quote-argument (car pat))))
((consp pat)
(concat (shell-quote-argument "(") " "
(mapconcat (lambda (s)
(concat "-name " (shell-quote-argument s)))
pat
" -o ")
" " (shell-quote-argument ")")))
(t
(error "Customize `semantic-symref-filepattern-alist' for %s" major-mode))
)))
(if (null pat)
(error "Customize `semantic-symref-filepattern-alist' for %S"
major-mode)
(let ((args `("-name" ,(car pat))))
(if (null (cdr args))
args
`("(" ,@args
,@(apply #'nconc (mapcar (lambda (s) `("-o" "-name" ,s)) pat))
")"))))))
(defvar grepflags)
(defvar greppattern)
@ -147,7 +141,8 @@ This shell should support pipe redirect syntax."
;; Find the root of the project, and do a find-grep...
(let* (;; Find the file patterns to use.
(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.
(grepflags (cond ((eq (oref tool :resulttype) 'file)
"-l ")