]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/semantic/symref.el
Update copyright year to 2014 by running admin/update-copyright.
[gnu-emacs] / lisp / cedet / semantic / symref.el
index d4e67c8a61ed60ae6b9ec43f450c4e7cdc166591..994d85c7b2cb6ca1747f87bc177ad2129f306cca 100644 (file)
@@ -1,6 +1,6 @@
 ;;; semantic/symref.el --- Symbol Reference API
 
-;; Copyright (C) 2008, 2009  Free Software Foundation, Inc.
+;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <eric@siege-engine.com>
 
@@ -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