X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/114f9c96795aff3b51b9060d7c9c1b77debcc99a..ba3189039adc8ec5eba5ed3e21d42019a4616b7c:/lisp/cedet/semantic/symref.el diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el index f1e3f9a5d9..994d85c7b2 100644 --- a/lisp/cedet/semantic/symref.el +++ b/lisp/cedet/semantic/symref.el @@ -1,6 +1,6 @@ ;;; semantic/symref.el --- Symbol Reference API -;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. +;; Copyright (C) 2008-2014 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam @@ -69,8 +69,9 @@ (defvar ede-minor-mode) (declare-function data-debug-new-buffer "data-debug") (declare-function data-debug-insert-object-slots "eieio-datadebug") -(declare-function ede-toplevel "ede/files") +(declare-function ede-toplevel "ede/base") (declare-function ede-project-root-directory "ede/files") +(declare-function ede-up-directory "ede/files") ;;; Code: (defvar semantic-symref-tool 'detect @@ -98,16 +99,27 @@ is supported. If no tools are supported, then 'grep is assumed.") +(defun semantic-symref-calculate-rootdir () + "Calculate the root directory for a symref search. +Start with and EDE project, or use the default directory." + (let* ((rootproj (when (and (featurep 'ede) ede-minor-mode) + (ede-toplevel))) + (rootdirbase (if rootproj + (ede-project-root-directory rootproj) + default-directory))) + (if (and rootproj (condition-case nil + ;; Hack for subprojects. + (oref rootproj :metasubproject) + (error nil))) + (ede-up-directory rootdirbase) + rootdirbase))) + (defun semantic-symref-detect-symref-tool () "Detect the symref tool to use for the current buffer." (if (not (eq semantic-symref-tool 'detect)) semantic-symref-tool ;; We are to perform a detection for the right tool to use. - (let* ((rootproj (when (and (featurep 'ede) ede-minor-mode) - (ede-toplevel))) - (rootdir (if rootproj - (ede-project-root-directory rootproj) - default-directory)) + (let* ((rootdir (semantic-symref-calculate-rootdir)) (tools semantic-symref-tool-alist)) (while (and tools (eq semantic-symref-tool 'detect)) (when (funcall (car (car tools)) rootdir) @@ -173,7 +185,7 @@ to perform the search. This was added for use by a test harness." ;;;###autoload (defun semantic-symref-find-tags-by-name (name &optional scope) - "Find a list of references to NAME in the current project. + "Find a list of tags by NAME in the current project. Optional SCOPE specifies which file set to search. Defaults to 'project. Refers to `semantic-symref-tool', to determine the reference tool to use for the current buffer. @@ -312,7 +324,7 @@ Use the `semantic-symref-hit-tags' method to get this list.") (setq ans (list (car files)) files (cdr files)) (dolist (F files) - ;; This algorithm for uniqing the file list depends on the + ;; This algorithm for uniquifying the file list depends on the ;; tool in question providing all the hits in the same file ;; grouped together. (when (not (string= F (car ans))) @@ -344,7 +356,7 @@ already." (lambda (hit) (let* ((line (car hit)) (file (cdr hit)) - (buff (get-file-buffer file)) + (buff (find-buffer-visiting file)) (tag nil) ) (cond @@ -377,9 +389,11 @@ already." (forward-line (1- line)) ;; Search forward for the matching text - (re-search-forward (regexp-quote txt) - (point-at-eol) - t) + (when (re-search-forward (regexp-quote txt) + (point-at-eol) + t) + (goto-char (match-beginning 0)) + ) (setq tag (semantic-current-tag)) @@ -496,5 +510,4 @@ over until it returns nil." ;; generated-autoload-load-name: "semantic/symref" ;; End: -;; arch-tag: 928394b7-19ef-4f76-8cb3-37e9a9891984 ;;; semantic/symref.el ends here