From: Dmitry Gutov Date: Sat, 15 May 2021 00:44:16 +0000 (+0300) Subject: Add :company-kind support to sh-mode completion X-Git-Tag: emacs-28.0.90~2470 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=efea3a02f5f90566ba6e0c61371a68e21e2d1d77;p=emacs.git Add :company-kind support to sh-mode completion * lisp/progmodes/sh-script.el (sh--completion-keywords): New variable. (sh--cmd-completion-table): Extracted from here. (sh-completion-at-point-function): Add :company-kind. --- diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index c6bd32a4a4b..c3a12c5b2c5 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1596,6 +1596,8 @@ This adds rules for comments and assignments." ;;; Completion +(defvar sh--completion-keywords '("if" "while" "until" "for")) + (defun sh--vars-before-point () (save-excursion (let ((vars ())) @@ -1617,7 +1619,7 @@ This adds rules for comments and assignments." (sh--vars-before-point)) (locate-file-completion-table exec-path exec-suffixes string pred t) - '("if" "while" "until" "for")))) + sh--completion-keywords))) (complete-with-action action cmds string pred))) (defun sh-completion-at-point-function () @@ -1628,9 +1630,17 @@ This adds rules for comments and assignments." (start (point))) (cond ((eq (char-before) ?$) - (list start end (sh--vars-before-point))) + (list start end (sh--vars-before-point) + :company-kind (lambda (_) 'variable))) ((sh-smie--keyword-p) - (list start end #'sh--cmd-completion-table)))))) + (list start end #'sh--cmd-completion-table + :company-kind + (lambda (s) + (cond + ((member s sh--completion-keywords) 'keyword) + ((string-suffix-p "=" s) 'variable) + (t 'function))) + )))))) ;;; Indentation and navigation with SMIE.