]> code.delx.au - gnu-emacs-elpa/blobdiff - company-semantic.el
Don't "adjust key" (#422)
[gnu-emacs-elpa] / company-semantic.el
index 6c020a30f70ba4eaed2730b0d1c1ea4549ca716e..1680a60f90f195b339db290a27ae161bc7ad8250 100644 (file)
@@ -1,4 +1,4 @@
-;;; company-semantic.el --- company-mode completion back-end using Semantic
+;;; company-semantic.el --- company-mode completion backend using Semantic
 
 ;; Copyright (C) 2009-2011, 2013  Free Software Foundation, Inc.
 
 (declare-function semantic-tag-start "semantic/tag")
 (declare-function semantic-tag-buffer "semantic/tag")
 (declare-function semantic-active-p "semantic")
+(declare-function semantic-format-tag-prototype "semantic/format")
 
 (defgroup company-semantic nil
-  "Completion back-end using Semantic."
+  "Completion backend using Semantic."
   :group 'company)
 
 (defcustom company-semantic-metadata-function 'company-semantic-summary-and-doc
       (push tag company-semantic--current-tags)))
   (delete "" (mapcar 'semantic-tag-name company-semantic--current-tags)))
 
+(defun company-semantic-annotation (argument tags)
+  (let* ((tag (assoc argument tags))
+         (kind (when tag (elt tag 1))))
+    (cl-case kind
+      (function (let* ((prototype (semantic-format-tag-prototype tag nil nil))
+                       (par-pos (string-match "(" prototype)))
+                  (when par-pos (substring prototype par-pos)))))))
+
 (defun company-semantic--pre-prefix-length (prefix-length)
   "Sum up the length of all chained symbols before POS.
 Symbols are chained by \".\" or \"->\"."
   (save-excursion
     (let ((pos (point)))
       (goto-char (- (point) prefix-length))
-      (while (looking-back "->\\|\\.")
+      (while (looking-back "->\\|\\." (- (point) 2))
         (goto-char (match-beginning 0))
         (skip-syntax-backward "w_"))
       (- pos (point)))))
@@ -118,7 +127,7 @@ Symbols are chained by \".\" or \"->\"."
 
 ;;;###autoload
 (defun company-semantic (command &optional arg &rest ignored)
-  "`company-mode' completion back-end using CEDET Semantic."
+  "`company-mode' completion backend using CEDET Semantic."
   (interactive (list 'interactive))
   (cl-case command
     (interactive (company-begin-backend 'company-semantic))
@@ -128,11 +137,13 @@ Symbols are chained by \".\" or \"->\"."
                  (not (company-in-string-or-comment))
                  (or (company-semantic--grab) 'stop)))
     (candidates (if (and (equal arg "")
-                         (not (looking-back "->\\|\\.")))
+                         (not (looking-back "->\\|\\." (- (point) 2))))
                     (company-semantic-completions-raw arg)
                   (company-semantic-completions arg)))
     (meta (funcall company-semantic-metadata-function
                    (assoc arg company-semantic--current-tags)))
+    (annotation (company-semantic-annotation arg
+                                             company-semantic--current-tags))
     (doc-buffer (company-semantic-doc-buffer
                  (assoc arg company-semantic--current-tags)))
     ;; Because "" is an empty context and doesn't return local variables.