- (let ((templ (company-template-declare-template beg end)))
- (while (re-search-forward (concat " *\\([^,)]*\\)[,)]") end t)
- (let ((sig (match-string 1)))
- (delete-region (match-beginning 1) (match-end 1))
- (save-excursion
- (company-template-add-field templ (match-beginning 1)
- (format "arg%d" cnt) sig))
- (cl-incf cnt)))
- (company-template-move-to-first templ))))))
+ (backward-sexp)
+ (forward-char)
+ (setq cnt (company-template--c-like-args templ angle-close
+ cnt))))
+ (when paren-open
+ (goto-char paren-open)
+ (company-template--c-like-args templ paren-close cnt)))
+ (if (overlay-get templ 'company-template-fields)
+ (company-template-move-to-first templ)
+ (company-template-remove-template templ)
+ (goto-char end))))
+
+(defun company-template--c-like-args (templ end counter)
+ (let ((last-pos (point)))
+ (while (re-search-forward "\\([^,]+\\),?" end 'move)
+ (when (zerop (car (parse-partial-sexp last-pos (point))))
+ (let ((sig (buffer-substring-no-properties last-pos (match-end 1))))
+ (save-excursion
+ (company-template-add-field templ last-pos
+ (format "arg%d" counter) sig)
+ (delete-region (point) (+ (point) (length sig))))
+ (skip-chars-forward " ")
+ (setq last-pos (point))
+ (cl-incf counter)))))
+ counter)