Mercurial > emacs
changeset 104440:8af937a89d62
cedet/semantic/db-search.el: File removed (obsolete).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Mon, 31 Aug 2009 00:13:42 +0000 |
parents | da5b2513c225 |
children | 902d22a2d922 |
files | lisp/cedet/semantic/db-search.el |
diffstat | 1 files changed, 0 insertions(+), 451 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/cedet/semantic/db-search.el Sun Aug 30 21:16:39 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,451 +0,0 @@ -;;; db-search.el --- Searching through semantic databases. - -;;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2008, 2009 -;;; Free Software Foundation, Inc. - -;; Author: Eric M. Ludlam <zappo@gnu.org> - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. - -;;; Commentary: -;; -;; NOTE: THESE APIs ARE OBSOLETE: -;; -;; Databases of various forms can all be searched. These routines -;; cover many common forms of searching. -;; -;; There are three types of searches that can be implemented: -;; -;; Basic Search: -;; These searches allow searching on specific attributes of tags, -;; such as name or type. -;; -;; Advanced Search: -;; These are searches that were needed to accomplish some tasks -;; during in utilities. Advanced searches include matching methods -;; defined outside some parent class. -;; -;; The reason for advanced searches are so that external -;; repositories such as the Emacs obarray, or java .class files can -;; quickly answer these needed questions without dumping the entire -;; symbol list into Emacs for a regular semanticdb search. -;; -;; Generic Search: -;; The generic search, `semanticdb-find-nonterminal-by-function' -;; accepts a Emacs Lisp predicate that tests tags in Semantic -;; format. Most external searches cannot perform this search. - -(require 'semantic/db) -(require 'semantic/find) - -;;; Code: -;; -;;; Classes: - -;; @TODO MOVE THIS CLASS? -(defclass semanticdb-search-results-table (semanticdb-abstract-table) - ( - ) - "Table used for search results when there is no file or table association. -Examples include search results from external sources such as from -Emacs' own symbol table, or from external libraries.") - -(defmethod semanticdb-refresh-table ((obj semanticdb-search-results-table) &optional force) - "If the tag list associated with OBJ is loaded, refresh it. -This will call `semantic-fetch-tags' if that file is in memory." - nil) - -;;; Utils -;; -;; Convenience routines for searches -(defun semanticdb-collect-find-results (result-in-databases - result-finding-function - ignore-system - find-file-on-match) - "OBSOLETE: -Collect results across RESULT-IN-DATABASES for RESULT-FINDING-FUNCTION. -If RESULT-IN-DATABASES is nil, search a range of associated databases -calculated by `semanticdb-current-database-list'. -RESULT-IN-DATABASES is a list of variable `semanticdb-project-database' -objects. -RESULT-FINDING-FUNCTION should accept one argument, the database being searched. -Argument IGNORE-SYSTEM specifies if any available system databases should -be ignored, or searched. -Argument FIND-FILE-ON-MATCH indicates that the found databases -should be capable of doing so." - (if (not (listp result-in-databases)) - (signal 'wrong-type-argument (list 'listp result-in-databases))) - (let* ((semanticdb-search-system-databases - (if ignore-system - nil - semanticdb-search-system-databases)) - (dbs (or result-in-databases - ;; Calculate what database to use. - ;; Something simple and dumb for now. - (or (semanticdb-current-database-list) - (list (semanticdb-current-database))))) - (case-fold-search semantic-case-fold) - (res (mapcar - (lambda (db) - (if (or (not find-file-on-match) - (not (child-of-class-p - (oref db new-table-class) - semanticdb-search-results-table))) - (funcall result-finding-function db))) - dbs)) - out) - ;; Flatten the list. The DB is unimportant at this stage. - (setq res (apply 'append res)) - (setq out nil) - ;; Move across results, and throw out empties. - (while res - (if (car res) - (setq out (cons (car res) out))) - (setq res (cdr res))) - ;; Results - out)) - -;;; Programatic interfaces -;; -;; These routines all perform different types of searches, and are -;; interfaces to the database methods used to also perform those searches. - -(defun semanticdb-find-nonterminal-by-token - (token &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all occurances of nonterminals with token TOKEN in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES, DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-token-method - db token search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-token - "Please don't use this function") - -(defun semanticdb-find-nonterminal-by-name - (name &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all occurances of nonterminals with name NAME in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES, DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-name-method - db name search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-name - "Please don't use this function") - -(defun semanticdb-find-nonterminal-by-name-regexp - (regex &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all occurances of nonterminals with name matching REGEX in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-name-regexp-method - db regex search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-name-regexp - "Please don't use this function") - - -(defun semanticdb-find-nonterminal-by-type - (type &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all nonterminals with a type of TYPE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-type-method - db type search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-type - "Please don't use this function") - - -(defun semanticdb-find-nonterminal-by-property - (property value &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all nonterminals with a PROPERTY equal to VALUE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-property-method - db property value search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-property - "Please don't use this function") - -(defun semanticdb-find-nonterminal-by-extra-spec - (spec &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all nonterminals with a SPEC in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-extra-spec-method - db spec search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-extra-spec - "Please don't use this function") - -(defun semanticdb-find-nonterminal-by-extra-spec-value - (spec value &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all nonterminals with a SPEC equal to VALUE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-extra-spec-value-method - db spec value search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) -(make-obsolete 'semanticdb-find-nonterminal-by-extra-spec-value - "Please don't use this function") - -;;; Advanced Search Routines -;; -(defun semanticdb-find-nonterminal-external-children-of-type - (type &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all nonterminals which are child elements of TYPE. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-external-children-of-type-method - db type search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) - -;;; Generic Search routine -;; - -(defun semanticdb-find-nonterminal-by-function - (function &optional databases search-parts search-includes diff-mode find-file-match ignore-system) - "OBSOLETE: -Find all occurances of nonterminals which match FUNCTION. -Search in all DATABASES. If DATABASES is nil, search a range of -associated databases calculated `semanticdb-current-database-list' and -DATABASES is a list of variable `semanticdb-project-database' objects. -When SEARCH-PARTS is non-nil the search will include children of tags. -When SEARCH-INCLUDES is non-nil, the search will include dependency files. -When DIFF-MODE is non-nil, search databases which are of a different mode. -A Mode is the `major-mode' that file was in when it was last parsed. -When FIND-FILE-MATCH is non-nil, the make sure any found token's file is -in an Emacs buffer. -When IGNORE-SYSTEM is non-nil, system libraries are not searched. -Return a list ((DB-TABLE . TOKEN-OR-TOKEN-LIST) ...)." - (semanticdb-collect-find-results - databases - (lambda (db) - (semanticdb-find-nonterminal-by-function-method - db function search-parts search-includes diff-mode find-file-match)) - ignore-system - find-file-match)) - -;;; Search Methods -;; -;; These are the base routines for searching semantic databases. -;; Overload these with your subclasses to participate in the searching -;; mechanism. -(defmethod semanticdb-find-nonterminal-by-token-method - ((database semanticdb-project-database) token search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -In DB, find all occurances of nonterminals with token TOKEN in databases. -See `semanticdb-find-nonterminal-by-function-method' for details on, -SEARCH-PARTS, SEARCH-INCLUDES, DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (let ((goofy-token-name token)) - (semanticdb-find-nonterminal-by-function-method - database (lambda (stream sp si) - (semantic-brute-find-tag-by-class goofy-token-name stream sp si)) - search-parts search-includes diff-mode find-file-match))) - -(defmethod semanticdb-find-nonterminal-by-name-method - ((database semanticdb-project-database) name search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all occurances of nonterminals with name NAME in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES, DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-first-tag-by-name name stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -(defmethod semanticdb-find-nonterminal-by-name-regexp-method - ((database semanticdb-project-database) regex search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all occurances of nonterminals with name matching REGEX in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-tag-by-name-regexp regex stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -(defmethod semanticdb-find-nonterminal-by-type-method - ((database semanticdb-project-database) type search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all nonterminals with a type of TYPE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-tag-by-type type stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -(defmethod semanticdb-find-nonterminal-by-property-method - ((database semanticdb-project-database) property value search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all nonterminals with a PROPERTY equal to VALUE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-tag-by-property property value stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -(defmethod semanticdb-find-nonterminal-by-extra-spec-method - ((database semanticdb-project-database) spec search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all nonterminals with a SPEC in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-tag-by-attribute spec stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -(defmethod semanticdb-find-nonterminal-by-extra-spec-value-method - ((database semanticdb-project-database) spec value search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all nonterminals with a SPEC equal to VALUE in databases. -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, and FIND-FILE-MATCH. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - (lambda (stream sp si) - (semantic-brute-find-tag-by-attribute-value spec value stream sp si)) - search-parts search-includes diff-mode find-file-match)) - -;;; Advanced Searches -;; -(defmethod semanticdb-find-nonterminal-external-children-of-type-method - ((database semanticdb-project-database) type search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -Find all nonterminals which are child elements of TYPE -See `semanticdb-find-nonterminal-by-function' for details on DATABASES, -SEARCH-PARTS, SEARCH-INCLUDES DIFF-MODE, FIND-FILE-MATCH and IGNORE-SYSTEM. -Return a list ((DB-TABLE . TOKEN-LIST) ...)." - (semanticdb-find-nonterminal-by-function-method - database - `(lambda (stream sp si) - (semantic-brute-find-tag-by-function - (lambda (tok) - (let ((p (semantic-nonterminal-external-member-parent tok))) - (and (stringp p) (string= ,type p))) - ) - stream sp si)) - nil nil t)) - -;;; Generic Search -;; -(defmethod semanticdb-find-nonterminal-by-function-method - ((database semanticdb-project-database) - function &optional search-parts search-includes diff-mode find-file-match) - "OBSOLETE: -In DATABASE, find all occurances of nonterminals which match FUNCTION. -When SEARCH-PARTS is non-nil the search will include children of tags. -When SEARCH-INCLUDES is non-nil, the search will include dependency files. -When DIFF-MODE is non-nil, search databases which are of a different mode. -A mode is the `major-mode' that file was in when it was last parsed. -When FIND-FILE-MATCH is non-nil, the make sure any found token's file is -in an Emacs buffer. -Return a list of matches." - (let* ((ret nil) - (files (semanticdb-get-database-tables database)) - (found nil) - (orig-buffer (current-buffer))) - (while files - (when (or diff-mode - (semanticdb-equivalent-mode (car files) orig-buffer)) - ;; This can cause unneeded refreshes while typing with - ;; senator-eldoc mode. - ;;(semanticdb-refresh-table (car files)) - (setq found (funcall function - (semanticdb-get-tags (car files)) - search-parts - search-includes - ))) - (if found - (progn - ;; When something is found, make sure we read in that buffer if it - ;; had not already been loaded. - (if find-file-match - (save-excursion (semanticdb-set-buffer (car files)))) - ;; In theory, the database is up-to-date with what is in the file, and - ;; these tags are ready to go. - ;; There is a bug lurking here I don't have time to fix. - (setq ret (cons (cons (car files) found) ret)) - (setq found nil))) - (setq files (cdr files))) - (nreverse ret))) - -(provide 'semantic/db-search) - -;;; semanticdb-search.el ends here