emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 2bfe1ad 16/20: snippet: Support guessing parent package/cl


From: Daiki Ueno
Subject: [elpa] master 2bfe1ad 16/20: snippet: Support guessing parent package/class
Date: Wed, 10 Feb 2016 08:39:32 +0000

branch: master
commit 2bfe1ad56add5c760be782cd3ba25cefea92813e
Author: Daiki Ueno <address@hidden>
Commit: Daiki Ueno <address@hidden>

    snippet: Support guessing parent package/class
---
 gnome-c-snippet.el |   19 +++++++++++++++----
 gnome-c-tests.el   |   10 ++++++++--
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/gnome-c-snippet.el b/gnome-c-snippet.el
index d720c76..b8999b4 100644
--- a/gnome-c-snippet.el
+++ b/gnome-c-snippet.el
@@ -83,7 +83,7 @@
                                             (c-backward-syntactic-ws)
                                             (point))))
          uppercased-package uppercased-class
-         capitalized-package capitalized-class)
+         capitalized-package capitalized-class capitalized-parent)
       (c-forward-syntactic-ws)
       (c-forward-token-2 3)
       (setq uppercased-package (split-string
@@ -102,6 +102,14 @@
                                                  (c-backward-syntactic-ws)
                                                  (point)))
                              "_"))
+      (c-forward-syntactic-ws)
+      (c-forward-token-2)
+      (setq capitalized-parent (gnome-c-snippet--parse-name
+                               (buffer-substring (point)
+                                                 (progn
+                                                   (c-forward-token-2)
+                                                   (c-backward-syntactic-ws)
+                                                   (point)))))
       (catch 'error
        (let ((index 0))
          (dolist (uppercased uppercased-package)
@@ -123,7 +131,8 @@
              (push capitalized capitalized-class)
              (setq index (+ index length))))))
       (list (nreverse capitalized-package)
-           (nreverse capitalized-class)))))
+           (nreverse capitalized-class)
+           capitalized-parent))))
 
 (defun gnome-c-snippet--find-header-buffer ()
   (pcase (file-name-extension buffer-file-name)
@@ -145,7 +154,7 @@
        (symbol-value (intern (format "gnome-c-snippet-%S" symbol)))))))
 
 (defun gnome-c-snippet--guess-name-from-declaration (symbol)
-  (when (memq symbol '(package class))
+  (when (memq symbol '(package class parent-package parent-class))
     (let ((header-buffer (gnome-c-snippet--find-header-buffer)))
       (when header-buffer
        (with-current-buffer header-buffer
@@ -158,7 +167,9 @@
              (when names
                (pcase symbol
                  (`package (car names))
-                 (`class (nth 1 names)))))))))))
+                 (`class (nth 1 names))
+                 (`parent-package (list (car (nth 2 names))))
+                 (`parent-class (cdr (nth 2 names))))))))))))
 
 (defun gnome-c-snippet--guess-name-from-file-name (symbol)
   (when (memq symbol '(package class))
diff --git a/gnome-c-tests.el b/gnome-c-tests.el
index fa13a73..75935ed 100644
--- a/gnome-c-tests.el
+++ b/gnome-c-tests.el
@@ -226,6 +226,12 @@ G_DECLARE_FINAL_TYPE (GGpgEngineInfo, g_gpg_engine_info, 
G_GPG, ENGINE_INFO,
     (c-mode)
     (setq buffer-file-name "gpgme-glib.h")
     (let ((package (gnome-c-snippet--guess-name-from-declaration 'package))
-         (class (gnome-c-snippet--guess-name-from-declaration 'class)))
+         (class (gnome-c-snippet--guess-name-from-declaration 'class))
+         (parent-package
+          (gnome-c-snippet--guess-name-from-declaration 'parent-package))
+         (parent-class
+          (gnome-c-snippet--guess-name-from-declaration 'parent-class)))
       (should (equal package '("G" "Gpg")))
-      (should (equal class '("Engine" "Info"))))))
+      (should (equal class '("Engine" "Info")))
+      (should (equal parent-package '("G")))
+      (should (equal parent-class '("Object"))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]