From efea3a02f5f90566ba6e0c61371a68e21e2d1d77 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Sat, 15 May 2021 03:44:16 +0300 Subject: [PATCH] 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. --- lisp/progmodes/sh-script.el | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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. -- 2.39.5