From 94f6a1917ba71f7beafa5e1164b6becebc0149e2 Mon Sep 17 00:00:00 2001 From: Nikolaj Schumacher Date: Sun, 15 Mar 2009 15:05:49 +0100 Subject: [PATCH] Added completion for local lisp variables. --- company-elisp.el | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/company-elisp.el b/company-elisp.el index b915423..481a55b 100644 --- a/company-elisp.el +++ b/company-elisp.el @@ -10,14 +10,40 @@ (/= (char-before (- (point) (length prefix))) ?`)) prefix))) +(defun company-elisp-predicate (symbol) + (or (boundp symbol) + (fboundp symbol))) + +(defvar company-elisp-parse-limit 30) +(defvar company-elisp-parse-depth 100) + +(defun company-elisp-parse-let () + (let (vars) + (ignore-errors + (save-excursion + (dotimes (i company-elisp-parse-depth) + (up-list -1) + (save-excursion + (when (looking-at "([ \t\n]*let") + (down-list 2) + (ignore-errors + (dotimes (i company-elisp-parse-limit) + (save-excursion + (down-list 1) + (if (looking-at "[ \t\n]*\\(\\(?:\\sw\\|\\s_\\)+\\)") + (add-to-list 'vars (match-string-no-properties 1)) + (error))) + (forward-sexp)))))))) + vars)) + (defun company-elisp (command &optional arg &rest ignored) (case command ('prefix (and (eq major-mode 'emacs-lisp-mode) (company-grab-lisp-symbol))) ('candidates (let ((completion-ignore-case nil)) - (all-completions arg obarray - (lambda (symbol) (or (boundp symbol) - (fboundp symbol)))))))) + (append (all-completions arg (company-elisp-parse-let)) + (all-completions arg obarray + 'company-elisp-predicate)))))) (provide 'company-elisp) ;;; company-elisp.el ends here -- 2.39.2