diff --git a/modules/completion/corfu/autoload.el b/modules/completion/corfu/autoload.el index 195c49c4c..fcac8babe 100644 --- a/modules/completion/corfu/autoload.el +++ b/modules/completion/corfu/autoload.el @@ -49,3 +49,18 @@ ;; Without this corfu quits immediately. (setq this-command #'corfu-insert-separator) (call-interactively #'corfu-insert-separator)))) + +;;;###autoload +(defun +corfu-in-doc-or-comment-p (_sym) + "Return non-nil if point is in a docstring or comment." + (or (nth 4 (syntax-ppss)) + (when-let ((faces '(font-lock-comment-face + font-lock-doc-face + tree-sitter-hl-face:doc + tree-sitter-hl-face:comment)) + (fs (get-text-property (point) 'face))) + (if (listp fs) + (cl-loop for f in fs + if (memq f faces) + return t) + (memq fs faces))))) diff --git a/modules/completion/corfu/config.el b/modules/completion/corfu/config.el index 08b469e6b..a6339e2d4 100644 --- a/modules/completion/corfu/config.el +++ b/modules/completion/corfu/config.el @@ -104,11 +104,8 @@ (add-hook! (prog-mode conf-mode) (defun +corfu-add-cape-emoji-h () (add-hook 'completion-at-point-functions - (cape-capf-inside-faces - (cape-capf-prefix-length #'cape-emoji 1) - ;; Only call inside comments and docstrings. - 'tree-sitter-hl-face:doc 'font-lock-doc-face - 'font-lock-comment-face 'tree-sitter-hl-face:comment) + (cape-capf-predicate (cape-capf-prefix-length #'cape-emoji 1) + #'+corfu-in-doc-or-comment-p) 10 t))) (add-hook! text-mode (defun +corfu-add-cape-emoji-text-h () @@ -119,10 +116,7 @@ (add-hook! (prog-mode conf-mode) (defun +corfu-add-cape-dict-h () (add-hook 'completion-at-point-functions - (cape-capf-inside-faces - ;; Only call inside comments and docstrings. - #'cape-dict 'tree-sitter-hl-face:doc 'font-lock-doc-face - 'font-lock-comment-face 'tree-sitter-hl-face:comment) + (cape-capf-predicate #'+corfu-in-doc-or-comment-p #'cape-dict) 40 t))) (add-hook! text-mode (defun +corfu-add-cape-dict-text-h ()