]> code.delx.au - gnu-emacs-elpa/commitdiff
Support template functions in company-clang annotations
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 7 Jan 2015 17:49:47 +0000 (20:49 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 7 Jan 2015 17:49:47 +0000 (20:49 +0300)
Fixes #271

company-clang.el
test/clang-tests.el

index f30bf1493dddb48ecec10c97538f5f40c8cd4c66..459056d0b3eb7658e671cab4fc8fe542d7d22d4a 100644 (file)
@@ -150,7 +150,13 @@ or automatically through a custom `company-clang-prefix-guesser'."
      ((string-match "[^:]:[^:]" meta)
       (substring meta (1+ (match-beginning 0))))
      ((string-match "\\((.*)[ a-z]*\\'\\)" meta)
-      (match-string 1 meta)))))
+      (let ((paren (match-beginning 1)))
+        (if (not (eq (aref meta (1- paren)) ?>))
+            (match-string 1 meta)
+          (with-temp-buffer
+            (insert meta)
+            (goto-char paren)
+            (substring meta (1- (search-backward "<"))))))))))
 
 (defun company-clang--strip-formatting (text)
   (replace-regexp-in-string
index 4d23a299c9458a9a81e5d0b791957d8784756dc2..c8c03b7802140c65c18e6a952dec841620dc45e5 100644 (file)
@@ -9,3 +9,17 @@
       (should (equal "createBookWithTitle:arg0 andAuthor:arg1" (buffer-string)))
       (should (looking-at "arg0"))
       (should (null (overlay-get (company-template-field-at) 'display))))))
+
+(ert-deftest company-clang-simple-annotation ()
+  (let ((str (propertize
+              "foo" 'meta
+              "wchar_t * wmemchr(wchar_t *__p, wchar_t __c, size_t __n)")))
+    (should (equal (company-clang 'annotation str)
+                   "(wchar_t *__p, wchar_t __c, size_t __n)"))))
+
+(ert-deftest company-clang-generic-annotation ()
+  (let ((str (propertize
+              "foo" 'meta
+              "shared_ptr<_Tp> make_shared<typename _Tp>(_Args &&__args...)")))
+    (should (equal (company-clang 'annotation str)
+                   "<typename _Tp>(_Args &&__args...)"))))