X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/dae79c4a43d60f160e5c794924037a77952fe71d..900ae0d7a2270ea1d2ea00567e80a619333fd4e5:/company-clang.el diff --git a/company-clang.el b/company-clang.el index 4929bad41..890a25d84 100644 --- a/company-clang.el +++ b/company-clang.el @@ -1,4 +1,4 @@ -;;; company-clang.el --- company-mode completion back-end for Clang -*- lexical-binding: t -*- +;;; company-clang.el --- company-mode completion backend for Clang -*- lexical-binding: t -*- ;; Copyright (C) 2009, 2011, 2013-2015 Free Software Foundation, Inc. @@ -30,7 +30,7 @@ (require 'cl-lib) (defgroup company-clang nil - "Completion back-end for Clang." + "Completion backend for Clang." :group 'company) (defcustom company-clang-executable @@ -144,6 +144,18 @@ or automatically through a custom `company-clang-prefix-guesser'." (get-text-property 0 'meta candidate)) (defun company-clang--annotation (candidate) + (let ((ann (company-clang--annotation-1 candidate))) + (if (not (and ann (string-prefix-p "(*)" ann))) + ann + (with-temp-buffer + (insert ann) + (search-backward ")") + (let ((pt (1+ (point)))) + (re-search-forward ".\\_>" nil t) + (delete-region pt (point))) + (buffer-string))))) + +(defun company-clang--annotation-1 (candidate) (let ((meta (company-clang--meta candidate))) (cond ((null meta) nil) @@ -191,11 +203,11 @@ or automatically through a custom `company-clang-prefix-guesser'." (buf (get-buffer-create "*clang-output*")) ;; Looks unnecessary in Emacs 25.1 and later. (process-adaptive-read-buffering nil)) - (with-current-buffer buf - (erase-buffer) - (setq buffer-undo-list t)) (if (get-buffer-process buf) (funcall callback nil) + (with-current-buffer buf + (erase-buffer) + (setq buffer-undo-list t)) (let ((process (apply #'start-process "company-clang" buf company-clang-executable args))) (set-process-sentinel @@ -277,26 +289,8 @@ or automatically through a custom `company-clang-prefix-guesser'." ver)) 0))) -(defun company-clang-objc-templatify (selector) - (let* ((end (point-marker)) - (beg (- (point) (length selector) 1)) - (templ (company-template-declare-template beg end)) - (cnt 0)) - (save-excursion - (goto-char beg) - (catch 'stop - (while (search-forward ":" end t) - (when (looking-at "([^)]*) ?") - (delete-region (match-beginning 0) (match-end 0))) - (company-template-add-field templ (point) (format "arg%d" cnt)) - (if (< (point) end) - (insert " ") - (throw 'stop t)) - (cl-incf cnt)))) - (company-template-move-to-first templ))) - (defun company-clang (command &optional arg &rest ignored) - "`company-mode' completion back-end for Clang. + "`company-mode' completion backend for Clang. Clang is a parser for C and ObjC. Clang version 1.1 or newer is required. Additional command line arguments can be specified in