]> code.delx.au - gnu-emacs-elpa/commitdiff
Fixed duplicate completions for let-bound variables.
authorNikolaj Schumacher <git@nschum.de>
Sat, 21 Mar 2009 21:44:36 +0000 (22:44 +0100)
committerNikolaj Schumacher <git@nschum.de>
Sat, 21 Mar 2009 21:44:36 +0000 (22:44 +0100)
company-elisp.el

index fdcb97017ee581305702baacb4afa9cda5359db1..341eca8078c41607290365de6dd02905153a4dad 100644 (file)
@@ -36,8 +36,9 @@
 (defvar company-elisp-parse-limit 30)
 (defvar company-elisp-parse-depth 100)
 
-(defun company-elisp-parse-let ()
-  (let (vars)
+(defun company-elisp-parse-let (prefix vars)
+  (let ((regexp (concat "[ \t\n]*\\(" (regexp-quote prefix)
+                        "\\(?:\\sw\\|\\s_\\)*\\_>\\)")))
     (ignore-errors
       (save-excursion
         (dotimes (i company-elisp-parse-depth)
                   (save-excursion
                     (when (looking-at "[ \t\n]*(")
                       (down-list 1))
-                    (if (looking-at "[ \t\n]*\\(\\(?:\\sw\\|\\s_\\)+\\)")
+                    (if (looking-at regexp)
                         (add-to-list 'vars (match-string-no-properties 1))
                       (error)))
                   (forward-sexp))))))))
     vars))
 
+(defun company-elisp-candidates (prefix)
+  (let* ((completion-ignore-case nil)
+         (candidates (all-completions prefix obarray 'company-elisp-predicate)))
+    (company-elisp-parse-let prefix candidates)))
+
 (defun company-elisp-doc (symbol)
   (let* ((symbol (intern symbol))
          (doc (if (fboundp symbol)
   (case command
     ('prefix (and (eq (derived-mode-p 'emacs-lisp-mode) 'emacs-lisp-mode)
                   (company-grab-lisp-symbol)))
-    ('candidates (let ((completion-ignore-case nil))
-                   (append (all-completions arg (company-elisp-parse-let))
-                           (all-completions arg obarray
-                                            'company-elisp-predicate))))
+    ('candidates (company-elisp-candidates arg))
     ('meta (company-elisp-doc arg))
     ('doc-buffer (let ((symbol (intern arg)))
                    (when (or (ignore-errors (describe-function symbol))