Function: semanticdb-find-tags-collector
semanticdb-find-tags-collector is a byte-compiled function defined in
db-find.el.gz.
Signature
(semanticdb-find-tags-collector FUNCTION &optional PATH FIND-FILE-MATCH BRUTISH)
Documentation
Collect all tags returned by FUNCTION over PATH.
The FUNCTION must take two arguments. The first is TABLE, which is a semanticdb table containing tags. The second argument to FUNCTION is TAGS. TAGS may be a list of tags. If TAGS is non-nil, then FUNCTION should search the TAG list, not through TABLE.
See semanticdb-find-translate-path for details on PATH.
FIND-FILE-MATCH indicates that any time a match is found, the file
associated with that tag should be loaded into a buffer.
Note: You should leave FIND-FILE-MATCH as nil. It is far more
efficient to take the results from any search and use
semanticdb-strip-find-results instead. This argument is here
for backward compatibility.
If optional argument BRUTISH is non-nil, then ignore include statements, and search all tables in this project tree.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/db-find.el.gz
;;; Semanticdb find API functions
;; These are the routines actually used to perform searches.
;;
(defun semanticdb-find-tags-collector (function &optional path find-file-match
brutish)
"Collect all tags returned by FUNCTION over PATH.
The FUNCTION must take two arguments. The first is TABLE,
which is a semanticdb table containing tags. The second argument
to FUNCTION is TAGS. TAGS may be a list of tags. If TAGS is non-nil,
then FUNCTION should search the TAG list, not through TABLE.
See `semanticdb-find-translate-path' for details on PATH.
FIND-FILE-MATCH indicates that any time a match is found, the file
associated with that tag should be loaded into a buffer.
Note: You should leave FIND-FILE-MATCH as nil. It is far more
efficient to take the results from any search and use
`semanticdb-strip-find-results' instead. This argument is here
for backward compatibility.
If optional argument BRUTISH is non-nil, then ignore include statements,
and search all tables in this project tree."
(let (found match)
(save-current-buffer
;; If path is a buffer, set ourselves up in that buffer
;; so that the override methods work correctly.
(when (bufferp path) (set-buffer path))
(if (semanticdb-find-results-p path)
;; When we get find results, loop over that.
(dolist (tableandtags path)
(semantic-throw-on-input 'semantic-find-translate-path)
;; If FIND-FILE-MATCH is non-nil, skip tables of class
;; `semanticdb-search-results-table', since those are system
;; databases and not associated with a file.
(unless (and find-file-match
(obj-of-class-p
(car tableandtags) 'semanticdb-search-results-table))
(when (setq match (funcall function
(car tableandtags) (cdr tableandtags)))
(when find-file-match
(save-excursion (semanticdb-set-buffer (car tableandtags))))
(push (cons (car tableandtags) match) found)))
)
;; Only log searches across data bases.
(semanticdb-find-log-new-search nil)
;; If we get something else, scan the list of tables resulting
;; from translating it into a list of objects.
(dolist (table (semanticdb-find-translate-path path brutish))
(semantic-throw-on-input 'semantic-find-translate-path)
;; If FIND-FILE-MATCH is non-nil, skip tables of class
;; `semanticdb-search-results-table', since those are system
;; databases and not associated with a file.
(unless (and find-file-match
(obj-of-class-p table 'semanticdb-search-results-table))
(when (and table (setq match (funcall function table nil)))
(semanticdb-find-log-activity table match)
(when find-file-match
(save-excursion (semanticdb-set-buffer table)))
(push (cons table match) found))))))
;; At this point, FOUND has had items pushed onto it.
;; This means items are being returned in REVERSE order
;; of the tables searched, so if you just get th CAR, then
;; too-bad, you may have some system-tag that has no
;; buffer associated with it.
;; It must be reversed.
(nreverse found)))