]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/semantic/complete.el
Add bug number.
[gnu-emacs] / lisp / cedet / semantic / complete.el
index fce76139027ad001474b768b11a1c1fa4bdf21da..fa9ebed92636708acf70e7b48eb13c1a60d0f69f 100644 (file)
@@ -1,7 +1,7 @@
 ;;; semantic/complete.el --- Routines for performing tag completion
 
-;;; Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
-;;; Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
+;;   Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
@@ -36,7 +36,7 @@
 ;; quickly without resorting to "show me every possible option now".
 ;;
 ;; In addition, some symbol names will appear in multiple locations.
-;; If it is important to distiguish, then a way to provide a choice
+;; If it is important to distinguish, then a way to provide a choice
 ;; over these locations is important as well.
 ;;
 ;; Beyond brute force offers for completion of plain strings,
@@ -55,7 +55,7 @@
 ;;
 ;; Here, we will treat each section separately (excluding D)
 ;; They can then be strung together in user-visible commands to
-;; fullfill specific needs.
+;; fulfil specific needs.
 ;;
 ;; COLLECTORS:
 ;;
 ;; `semantic-complete-inline-tag-engine' will complete text in
 ;; a buffer.
 
-(require 'eieio)
-(require 'eieio-opt)
+(eval-when-compile (require 'cl))
 (require 'semantic)
+(require 'eieio-opt)
 (require 'semantic/analyze)
 (require 'semantic/ctxt)
 (require 'semantic/decorate)
 (require 'semantic/format)
-(require 'semantic/tag)
 
 (eval-when-compile
   ;; For the semantic-find-tags-for-completion macro.
   (require 'semantic/find))
 
-(eval-when-compile
-  (condition-case nil
-      ;; Tooltip not available in older emacsen.
-      (require 'tooltip)
-    (error nil))
-  )
-
 ;;; Code:
 
-;;; Compatibility
-;;
-(if (fboundp 'minibuffer-contents)
-    (eval-and-compile (defalias 'semantic-minibuffer-contents 'minibuffer-contents))
-  (eval-and-compile (defalias 'semantic-minibuffer-contents 'buffer-string)))
-(if (fboundp 'delete-minibuffer-contents)
-    (eval-and-compile (defalias 'semantic-delete-minibuffer-contents 'delete-minibuffer-contents))
-  (eval-and-compile (defalias 'semantic-delete-minibuffer-contents 'erase-buffer)))
-
 (defvar semantic-complete-inline-overlay nil
   "The overlay currently active while completing inline.")
 
@@ -159,14 +142,14 @@ For inline completion, this is the text wrapped in the inline completion
 overlay."
   (if semantic-complete-inline-overlay
       (semantic-complete-inline-text)
-    (semantic-minibuffer-contents)))
+    (minibuffer-contents)))
 
 (defun semantic-completion-delete-text ()
   "Delete the text that is actively being completed.
 Presumably if you call this you will insert something new there."
   (if semantic-complete-inline-overlay
       (semantic-complete-inline-delete-text)
-    (semantic-delete-minibuffer-contents)))
+    (delete-minibuffer-contents)))
 
 (defun semantic-completion-message (fmt &rest args)
   "Display the string FMT formatted with ARGS at the end of the minibuffer."
@@ -209,10 +192,10 @@ Keeps STRINGS only in the history.")
                                                    default-tag initial-input
                                                    history)
   "Read a semantic tag, and return a tag for the selection.
-Argument COLLECTOR is an object which can be used to to calculate
+Argument COLLECTOR is an object which can be used to calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
-Argumeng DISPLAYOR is an object used to display a list of possible
+Argument DISPLAYOR is an object used to display a list of possible
 completions for a given prefix.  See`semantic-completion-display-engine'
 for details on DISPLAYOR.
 PROMPT is a string to prompt with.
@@ -241,7 +224,7 @@ HISTORY is a symbol representing a variable to story the history in."
       (if (string-match ":" prompt)
          (setq prompt (concat
                        (substring prompt 0 (match-beginning 0))
-                       " (" default-as-string ")"
+                       " (default " default-as-string ")"
                        (substring prompt (match-beginning 0))))
        (setq prompt (concat prompt " (" default-as-string "): "))))
     ;;
@@ -330,7 +313,8 @@ HISTORY is a symbol representing a variable to story the history in."
 ;; semantic-displayor-focus-abstract-child-p is part of the
 ;; semantic-displayor-focus-abstract class, defined later in this
 ;; file.
-(declare-function semantic-displayor-focus-abstract-child-p "semantic/complete")
+(declare-function semantic-displayor-focus-abstract-child-p "semantic/complete"
+                 t t)
 
 (defun semantic-complete-current-match ()
   "Calculate a match from the current completion environment.
@@ -410,7 +394,7 @@ Return value can be:
 \f
 ;;; Keybindings
 ;;
-;; Keys are bound to to perform completion using our mechanisms.
+;; Keys are bound to perform completion using our mechanisms.
 ;; Do that work here.
 (defun semantic-complete-done ()
   "Accept the current input."
@@ -531,8 +515,13 @@ if INLINE, then completion is happening inline in a buffer."
        (semantic-displayor-set-completions
         displayor
         (or
-         (and (not (eq na 'displayend))
-              (semantic-collector-current-exact-match collector))
+         ;; For the below - This caused problems for Chong Yidong
+         ;; when experimenting with the completion engine.  I don't
+         ;; remember what the problem was though, and I wasn't sure why
+         ;; the below two lines were there since they obviously added
+         ;; some odd behavior.  -EML
+         ;; (and (not (eq na 'displayend))
+         ;;      (semantic-collector-current-exact-match collector))
          (semantic-collector-all-completions collector contents))
         contents)
        ;; Ask the displayor to display them.
@@ -569,8 +558,7 @@ if INLINE, then completion is happening inline in a buffer."
       (lambda () (interactive)
        (describe-variable 'semantic-complete-inline-map)))
     km)
-  "Keymap used while performing Semantic inline completion.
-\\{semantic-complete-inline-map}")
+  "Keymap used while performing Semantic inline completion.")
 
 (defface semantic-complete-inline-face
   '((((class color) (background dark))
@@ -750,10 +738,10 @@ DO NOT CALL THIS IF THE INLINE COMPLETION ENGINE IS NOT ACTIVE."
 (defun semantic-complete-inline-tag-engine
   (collector displayor buffer start end)
   "Perform completion based on semantic tags in a buffer.
-Argument COLLECTOR is an object which can be used to to calculate
+Argument COLLECTOR is an object which can be used to calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
-Argumeng DISPLAYOR is an object used to display a list of possible
+Argument DISPLAYOR is an object used to display a list of possible
 completions for a given prefix.  See`semantic-completion-display-engine'
 for details on DISPLAYOR.
 BUFFER is the buffer in which completion will take place.
@@ -963,8 +951,7 @@ Calculate the cache if there isn't one."
   "Calculate the completions for prefix from completionlist.
 Output must be in semanticdb Find result format."
   ;; Must output in semanticdb format
-  (let ((table (save-excursion
-                (set-buffer (oref obj buffer))
+  (let ((table (with-current-buffer (oref obj buffer)
                 semanticdb-current-table))
        (result (semantic-find-tags-for-completion
                 prefix
@@ -1243,8 +1230,7 @@ inserted into the current context.")
            (semantic-analyze-possible-completions (oref obj context))))
   ;; search our cached completion list.  make it look like a semanticdb
   ;; results type.
-  (list (cons (save-excursion
-               (set-buffer (oref (oref obj context) buffer))
+  (list (cons (with-current-buffer (oref (oref obj context) buffer)
                semanticdb-current-table)
              (semantic-find-tags-for-completion
               prefix
@@ -1479,8 +1465,7 @@ one in the source buffer."
                   (and table (semanticdb-get-buffer table)))))
       ;; If no buffer is provided, then we can make up a summary buffer.
       (when (not buf)
-       (save-excursion
-         (set-buffer (get-buffer-create "*Completion Focus*"))
+       (with-current-buffer (get-buffer-create "*Completion Focus*")
          (erase-buffer)
          (insert "Focus on tag: \n")
          (insert (semantic-format-tag-summarize tag nil t) "\n\n")
@@ -1783,7 +1768,7 @@ completion text in ghost text."
                     C)))
           (eieio-build-class-alist semantic-displayor-abstract t))
          )
-  "Possible options for inlince completion displayors.
+  "Possible options for inline completion displayors.
 Use this to enable custom editing.")
 
 (defcustom semantic-complete-inline-analyzer-displayor-class
@@ -1896,7 +1881,7 @@ to generate the list of possible completions.
 PROMPT is the first part of the prompt.  Additional prompt
 is added based on the contexts full prefix.
 CONTEXT is the semantic analyzer context to start with.
-HISTORY is a symbol representing a variable to stor the history in.
+HISTORY is a symbol representing a variable to store the history in.
 usually a default-tag and initial-input are available for completion
 prompts.  these are calculated from the CONTEXT variable passed in."
   (if (not context) (setq context (semantic-analyze-current-context (point))))
@@ -1909,8 +1894,7 @@ prompts.  these are calculated from the CONTEXT variable passed in."
       :buffer (oref context buffer)
       :context context)
      (semantic-displayor-traditional-with-focus-highlight "simple")
-     (save-excursion
-       (set-buffer (oref context buffer))
+     (with-current-buffer (oref context buffer)
        (goto-char (cdr (oref context bounds)))
        (concat prompt (mapconcat 'identity syms ".")
               (if syms "." "")
@@ -1993,21 +1977,11 @@ completion works."
     ))
 
 \f
-;;; ------------------------------------------------------------
-;;; Testing/Samples
-;;
-(defun semantic-complete-test ()
-  "Test completion mechanisms."
-  (interactive)
-  (message "%S"
-   (semantic-format-tag-prototype
-    (semantic-complete-read-tag-project "Symbol: ")
-    )))
-
+;;;###autoload
 (defun semantic-complete-jump-local ()
   "Jump to a semantic symbol."
   (interactive)
-  (let ((tag (semantic-complete-read-tag-buffer-deep "Symbol: ")))
+  (let ((tag (semantic-complete-read-tag-buffer-deep "Jump to symbol: ")))
     (when (semantic-tag-p tag)
       (push-mark)
       (goto-char (semantic-tag-start tag))
@@ -2016,10 +1990,11 @@ completion works."
               (semantic-tag-class tag)
               (semantic-tag-name  tag)))))
 
+;;;###autoload
 (defun semantic-complete-jump ()
   "Jump to a semantic symbol."
   (interactive)
-  (let* ((tag (semantic-complete-read-tag-project "Symbol: ")))
+  (let* ((tag (semantic-complete-read-tag-project "Jump to symbol: ")))
     (when (semantic-tag-p tag)
       (push-mark)
       (semantic-go-to-tag tag)
@@ -2029,6 +2004,7 @@ completion works."
               (semantic-tag-class tag)
               (semantic-tag-name  tag)))))
 
+;;;###autoload
 (defun semantic-complete-analyze-and-replace ()
   "Perform prompt completion to do in buffer completion.
 `semantic-analyze-possible-completions' is used to determine the
@@ -2044,6 +2020,7 @@ The result is inserted as a replacement of the text that was there."
     (insert (semantic-tag-name tag))
     (message "%S" (semantic-format-tag-summarize tag))))
 
+;;;###autoload
 (defun semantic-complete-analyze-inline ()
   "Perform prompt completion to do in buffer completion.
 `semantic-analyze-possible-completions' is used to determine the
@@ -2058,14 +2035,14 @@ how completion options are displayed."
       (semantic-complete-inline-analyzer
        (semantic-analyze-current-context (point))))
   ;; Report a message if things didn't startup.
-  (if (and (interactive-p)
+  (if (and (called-interactively-p 'any)
           (not (semantic-completion-inline-active-p)))
       (message "Inline completion not needed.")
     ;; Since this is most likely bound to something, and not used
     ;; at idle time, throw in a TAB for good measure.
-    (semantic-complete-inline-TAB)
-    ))
+    (semantic-complete-inline-TAB)))
 
+;;;###autoload
 (defun semantic-complete-analyze-inline-idle ()
   "Perform prompt completion to do in buffer completion.
 `semantic-analyze-possible-completions' is used to determine the
@@ -2080,11 +2057,11 @@ to change how completion options are displayed."
       (semantic-complete-inline-analyzer-idle
        (semantic-analyze-current-context (point))))
   ;; Report a message if things didn't startup.
-  (if (and (interactive-p)
+  (if (and (called-interactively-p 'interactive)
           (not (semantic-completion-inline-active-p)))
-      (message "Inline completion not needed."))
-  )
+      (message "Inline completion not needed.")))
 
+;;;###autoload
 (defun semantic-complete-self-insert (arg)
   "Like `self-insert-command', but does completion afterwards.
 ARG is passed to `self-insert-command'.  If ARG is nil,
@@ -2113,26 +2090,12 @@ use `semantic-complete-analyze-inline' to complete."
       (error nil))
     ))
 
-;; @TODO - I can't  find where this fcn is used.  Delete?
-
-;;;;###autoload
-;(defun semantic-complete-inline-project ()
-;  "Perform inline completion for any symbol in the current project.
-;`semantic-analyze-possible-completions' is used to determine the
-;possible values.
-;The function returns immediately, leaving the buffer in a mode that
-;will perform the completion."
-;  (interactive)
-;  ;; Only do this if we are not already completing something.
-;  (if (not (semantic-completion-inline-active-p))
-;      (semantic-complete-inline-tag-project))
-;  ;; Report a message if things didn't startup.
-;  (if (and (interactive-p)
-;         (not (semantic-completion-inline-active-p)))
-;      (message "Inline completion not needed."))
-;  )
-
-;; End
 (provide 'semantic/complete)
 
+;; Local variables:
+;; generated-autoload-file: "loaddefs.el"
+;; generated-autoload-load-name: "semantic/complete"
+;; End:
+
+;; arch-tag: a07c8f71-e53b-416e-9704-3a99ef101b09
 ;;; semantic/complete.el ends here